这是我尝试过的,但出现错误:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
这是我尝试过的,但出现错误:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Answers:
OpenSSH附带有执行此操作的命令ssh-copy-id
。您只需为其提供远程地址,它会将您的公钥添加到authorized_keys
远程计算机上的文件中:
$ ssh-copy-id tim@just.some.other.server
您可能需要使用该-i
标志在本地计算机上找到您的公钥:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>
由您的Shell处理,并且您是通过SSH(而不是通过Shell)运行命令的。他使用SSH运行外壳程序然后运行您的命令的解决方法应该可以工作
ssh-copy-id
将不起作用,对吗?
您总是可以做这样的事情:
scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
我不确定是否可以cat
从本地计算机进入ssh会话。只需按照建议将其移动到/ tmp。
编辑:这正是ssh-copy-id
。就像迈克尔说的那样。
cat
或以其他方式)。您所描述的是老式的方式;ssh-copy-id
推荐这样做是因为这样会减少输入错误或给文件错误权限的风险。
该答案描述了如何使问题中显示的预期方式起作用。
您可以在远程计算机上执行外壳程序以解释>>
重定向运算符的特殊含义:
ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
重定向运算符 >>
通常由外壳程序解释。
当您执行时ssh host 'command >> file'
,则不能保证command >> file
将由Shell解释。在您的情况下,它command >> file
是在没有特殊解释的情况下代替外壳程序执行的,并>>
作为参数提供给命令-与command '>>' file
在外壳程序中运行的方式相同。
某些版本的SSH(OpenSSH_5.9)将在检测到要由Shell ;
>
>>
等解释的令牌时自动在远程服务器上调用Shell并将命令传递给它。
openssh
确实提供了ssh-copy-id
。顺序为:
生成一个不错的4k密钥
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
启动您的ssh-agent并吸收诸如SSH_AGENT_PID
等的信息。
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
现在开始将密钥加载到您的SSH代理中
ssh-add ~/.ssh/id_rsa4k
检查它是否已加载
ssh-add -l
ssh-add -L
这将向您显示ssh-agent中的内容
现在实际上是SSH到远程系统
ssh username@remotehost.network
现在,您可以不带任何参数运行ssh-copy-id:
ssh-copy-id
这将创建~/.ssh/authorized_keys
并填写ssh-agent所需的基本信息。
实际上,该the ssh-copy-id
命令确实做到了这一点(来自openssh-client
软件包):
ssh-copy-id user@host
注意:host
表示IP地址或域。
我还想添加一些额外的信息,这
1)我们可以在目标服务器上为SSH 指定其他端口:
ssh-copy-id "-p 8127 user@host"
注:
该端口必须在前面user@host
,否则将无法解决。
2)我们可以指定一个带有公钥的文件:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
注:
该-i
选项允许我们使用包含公钥的文件来指示名称的适当位置。
有时它会派上用场,特别是如果我们将其存储在非标准位置,或者计算机上有多个公共密钥,并且我们想指向一个特定的密钥。