ssh到具有不同用户名的另一台服务器

时间:2013-03-12 08:12:11

标签: shell unix ssh expect

我必须编写一个shell脚本,使用其他用户名ssh到另一台服务器而不实际要求用户输入密码? 由于约束,我无法使用基于密钥的身份验证。 让, 源服务器 - abc.efg.com 来源用户名 - 汤姆 源密码 - tom123

目标服务器 - xyz.efc.com 目标用户名 - bob 目的地密码 - bob123

我必须将bash脚本放在源服务器中。 如果可以使用expect工具和/或sshpass完成某些事情,请告诉我。

我可以在bash脚本中对目标服务器的密码进行硬编码,但是我无法承担交互式会话,只是当我运行脚本时,我想看到目标服务器使用另一个用户名登录。

先谢谢。

4 个答案:

答案 0 :(得分:9)

您想使用密钥身份验证http://ornellas.apanela.com/dokuwiki/pub:ssh_key_auth

  1. 生成密钥 ssh-keygen
  2. 将密钥复制到新框 ssh-copy-id -i ~/.ssh/id_rsa.pub me@otherhost.com
  3. ssh到其他主机,没有密码 ssh me@otherhost.com

答案 1 :(得分:3)

你可以使用expect来包装ssh,但是它非常繁忙,并且在出现网络错误时很容易失败,所以要测试它或者使用专门用于包装ssh密码的脚本。基于密钥的身份验证更好。

您可以通过从空设备重定向标准输入来阻止交互式会话,即

ssh me@destination destination-command < /dev/null

关于将脚本放在源服务器中,如果您运行的脚本是本地脚本而不是远程脚本,那么您可以在标准输入而不是命令行上传递脚本:

cat bashscript.sh | ssh me@destination 

答案 2 :(得分:1)

答案是你不能像OpenSSH那样主动防止基于密码的无头认证。使用基于密钥的身份验证。

您可以分叉OpenSSH客户端代码并对其进行修补,但我认为这有点过分。

答案 3 :(得分:1)

您可以安装sshpass程序,它可以让您编写像

这样的脚本
#!/bin/bash

sshpass -p bob123 ssh UserName@xyz.efc.com