iT邦幫忙

0

終端機 上傳檔案到 AWS 的權限問題

各位大大們好!我嘗試從我的桌機 windows10 使用終端機上傳檔案到 我的 AWS 主機,卻碰到key 的權限報錯,而且不同的終端機,顯示報錯的情形也不相同,狀況如下:
我的命令:

scp -i "*****.pem" 001.jpg ubuntu@ec2-54-***-**-164.ap-northeast-1.compute.amazonaws.com:/var/www

終端機共3種 cmd Cmder Gitbash 輸出如下:
cmd:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '*****.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "*****.pem": bad permissions
ubuntu@ec2-54-***-**-164.ap-northeast-1.compute.amazonaws.com: Permission denied (publickey).
lost connection

Cmder:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '*****.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "*****.pem": bad permissions
ubuntu@ec2-54-***-**-164.ap-northeast-1.compute.amazonaws.com: Permission denied (publickey).
lost connection

Gitbash:

load pubkey "*****.pem": invalid format
scp: /var/www/001.jpg: Permission denied

我原本以為是*****.pem檔案權限問題所以也執行了以下命令:(沒有改善)

chmod 400 *****.pem

終端機共3種 cmd Cmder Gitbash 輸出如下
cmd:

'chmod' is not recognized as an internal or external command,
operable program or batch file.

Cmder 和 Gitbash 都沒有報錯也沒有輸出任何訊息
請教有經驗的大大,指點一下迷津。

看更多先前的討論...收起先前的討論...
fillano iT邦超人 1 級 ‧ 2021-11-18 16:33:45 檢舉
你登入遠端的Linux還找不到chmod嗎?
chmod 400 *****.pem
這樣更改檔案權限,似乎不起效果,有勞指點迷津,謝謝!
*****.pem 是 AWS 提供的 Key
我使用 ssh 登入遠端時沒有問題,上傳檔案時才出問題,而使用的 key 是同一個 *****.pem
fillano iT邦超人 1 級 ‧ 2021-11-18 17:09:38 檢舉
/var/www不是你帳號有寫入權限的目錄,所以你直接scp會失敗。
感謝指點!scp 問題的確是這樣。
另一個問題
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '*****.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "*****.pem": bad permissions
ubuntu@ec2-54-***-**-164.ap-northeast-1.compute.amazonaws.com: Permission denied (publickey).
lost connection
是否也能指點一下
fillano iT邦超人 1 級 ‧ 2021-11-18 22:36:57 檢舉
這pem在你的桌機吧,然後作業系統是windows 10?
提示:PEM轉PPK
@fillano 是的
@㊣浩瀚星空㊣ 您的意思是說要使用putty嗎?

1 個回答

1
raytracy
iT邦大神 1 級 ‧ 2021-11-19 11:45:39

AWS 給你的帳號只是 sudoer user, 不是 root, 你要先登入進去 sudo 之後, 才有權限可以寫入:除了 home directory 以外的其他目錄...

但是 scp 不會幫你下 sudo 指令, 所以你無法用 scp 去變更身分

你有幾種解法:

  1. 先 scp 把檔案傳進預設的 default home 目錄 (或者 /tmp, 通常 /tmp 都是 mode 777), 然後再用 ssh 進去, sudo 之後, 將檔案搬到指定的目錄中; 若嫌麻煩, 你可以寫成一個 script 自動執行:
ssh serverb sudo mkdir tempdir && sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination
  1. AWS 的 sudo 是不需要密碼的, 所以你可用 rsync 幫你提權傳檔:
rsync --rsync-path="sudo rsync" <LOCALFILE> USER@SERVER2:/root
  1. 你也可以用 ssh+tar 透過 pipeline 來代替你 sudo 傳檔:
ssh -t host 'sudo -v'
ssh -C host 'cd /; sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve
  1. 以上一切的麻煩, 在有人發明 git 之後, 就全部都解決了....你只需要用 ssh 登入, sudo 之後到指定的資料夾, 執行:
git pull <your_git_repository>

就可以更新全部的檔案差異...

非常感謝您不嫌麻煩地詳盡解釋,不過可能是我的程度過低,竟然看不懂您所提的幾個方法,而其中 git 我到會一些些,我想我應該改採 git 的方式。真摯地謝謝您。

我要發表回答

立即登入回答