不确定我问的问题是否正确,但基本上我想自动化这个过程
scp ~/.ssh/id_rsa.pub [email protected]:~/
ssh [email protected]
mkdir .ssh
cat id_rsa.pub >> .ssh/authorized_keys
rm id_rsa.pub
chmod go-w ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
所以我想我可以创建一个 shell 脚本并将其放入我的 .bash_profile 中,如下所示:function
setup_ssh () {
scp ~/.ssh/id_rsa.pub $1:~/
ssh $1
#the following is happens when connected to the server using ssh
mkdir .ssh
cat id_rsa.pub >> .ssh/authorized_keys
rm id_rsa.pub
chmod go-w ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
}
但当然这不起作用,因为一旦连接到服务器,它就不会继续执行命令。通过 ssh 连接到服务器后,有什么方法可以继续执行命令吗?
答案1
这是一种稍微不同的工作方式:
setup_ssh() {
cat ~/.ssh/id_rsa.pub | ssh $1 '
mkdir .ssh;
cat >> .ssh/authorized_keys;
chmod go-w .;
chmod 700 .ssh;
chmod 600 .ssh/authorized_keys
'
}
您也可以删除cat
id_rsa.pub 文件中的 shell 管道,但我认为这足以让您继续下去。
编辑:
它的工作方式
您基本上是在远程主机上启动一个新的 shell 来执行您传递给的命令ssh
(在引号中)。当到达该cat >> .ssh/authorized_keys
部分时,尚未从 STDIN 读取任何内容,因此来自 STDIN 的数据cat ~/.ssh/id_rsa.pub
仍保留在那里。cat
从 STDIN 读取数据,然后将其重定向到新的authorized_keys 文件。然后我们执行剩下的命令。
答案2
将您的身份添加到远程服务器,如果需要,还可以创建具有适当权限的 ~/.ssh 树。
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server