我正在尝试SCP证书。 在我的两个实例之间,并有一些麻烦。 这是我正在进入的。
[ec2-user@ip-xxx-xx-xx-xx ~] scp -i .ssh/key.pem /root/.ssh/id_rsa.pub 10.xxx.xx.xxx:/root/.ssh/authorized_keys2
回报
/root/.ssh/id_rsa.pub: Permission denied
我尝试了sudo,但EC2告诉我以ec2用户身份login以使用此命令。 我在做什么?
在您的scheme中有两组权限需要考虑 – 一个在本地机器上,另一个在远程机器上。 ec2用户没有权限访问本地计算机上的/ root文件夹。 使用sudo可以解决这个问题。 但是,您以非root用户身份login到远程计算机,并且您没有权限写入/ root文件夹。 这是你所看到的错误的原因。 (你可以通过在你的scp命令中添加-v标志来确认)。
至less有两种方法可以解决这个问题:
简单的方法:
把你的文件SCP放在远程权限上的一个目录(主目录(〜/)应该是好的,如果/ tmp目录几乎肯定会起作用,但是不太安全),然后SSH并移动文件。
sudo scp -i /root/path/to/keypair.pem / root / path / to / local_file [email protected]:〜/ path / to / remote_file ssh -i /root/path/to/keypair.pem [email protected] sudo mv〜/ path / to / remote_file / root / path / to / remote_file 出口
更难的方法
可以通过SSH传输文件,并使用此SSH连接在远程计算机上执行sudo,但远程计算机需要允许。 默认情况下,在Amazon的Linux上(看起来你是从你的用户名运行的),你不能在没有tty的情况下运行sudo。 要改变这个,在远程机器上运行visudo并注释掉Defaults requiretty (第56行),并保存该文件。 之后,您可以:
通过SSHpipe道您的密钥(请注意,您仍然需要sudo来读取本地文件):
sudo cat / root / path / to / local_file | ssh -v -i /root/path/to/keypair.pem [email protected]“sudo bash -c'cat - > / root / path / to / remote_file'”
或者,通过SSHredirect您的密钥(sudo仅适用于命令的第一部分,因此您需要成为root用户,或将整个命令放入脚本并使用sudo):
sudo -i ssh -i /root/path/to/keypair.pem [email protected] sudo sh -c'“cat / root / path / to / remote_file”</ root / path / to / LOCAL_FILE 出口
(有些程序看起来能够通过scplogin(比如WinSCP),但是我不知道有什么办法通过scp来运行命令 – 或许在这些场景下使用SSH来传输文件)
另一种方法是在远程机器上允许rootlogin,然后以root身份直接login到SCP(在本地仍然使用sudo)。 一旦你完成了与visudo所做的任何更改,请撤消。
这个错误意味着你不能读取指定的文件。
/root/.ssh/id_rsa.pub: Permission denied
你可以试试sudo scp ...
以root用户身份运行(如果未以root身份login,请先运行su ):
ssh-copy-id 10.xxx.xx.xxx
看起来像EC2不希望你以root身份login。 你能完成你想做什么作为EC2用户? 如果是这样:
ssh-copy-id [email protected]
如果没有,你可以1)编辑/ etc / ssh / sshd_config到PermitRootLogin yes然后重新启动sshd或者2)给ec2用户权限来做你想做的事情。