连接到 SSH 后继续执行 shell 命令

连接到 SSH 后继续执行 shell 命令

不确定我问的问题是否正确,但基本上我想自动化这个过程

  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
  '
}

您也可以删除catid_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

相关内容