Linux 如何从bashshell SSH到多个服务器并提供完整登录?

Linux 如何从bashshell SSH到多个服务器并提供完整登录?,linux,bash,ssh,Linux,Bash,Ssh,这似乎是一个相当受欢迎的问题,根据你所看的论坛,这个问题有大约1000个不同的答案。不幸的是,没有一个适合我 我正试图编写一个bashshell脚本,将其放入一个服务器列表中,并运行一个简单的停止服务命令来关闭每台机器上的应用程序服务器 要手动执行此操作,请执行以下操作: ssh user@server01.ourdomain.tld user@server01.ourdomain.tld's password: ourpassword Last login: Fri Nov 30 14:37:

这似乎是一个相当受欢迎的问题,根据你所看的论坛,这个问题有大约1000个不同的答案。不幸的是,没有一个适合我

我正试图编写一个bashshell脚本,将其放入一个服务器列表中,并运行一个简单的
停止服务
命令来关闭每台机器上的应用程序服务器

要手动执行此操作,请执行以下操作:

ssh user@server01.ourdomain.tld
user@server01.ourdomain.tld's password: ourpassword
Last login: Fri Nov 30 14:37:51 2012 from <some-ip-addr>
server01:[user@machinename ~]# (now we are SSHed in)
sshuser@server01.ourdomain.tld
user@server01.ourdomain.tld的密码:我们的密码
上次登录:Fri Nov 30 14:37:51 2012 from
server01:[user@machinename~]#(现在我们加入了)
所以我问:给定一组服务器名称(
server01
server25
),我如何将bash脚本写入到所有服务器中并运行
service-ourservice-stop
?这个脚本启动后不需要任何人工交互,因此应该为SSH命令提供适当的密码(
ourpassword
)。此外,我需要在脚本进入每台服务器后正确退出(或关闭连接),这样我们就不会挂起资源(打开连接等)。提前感谢。

请这样做

  • 使用
    ssh-keygen
    命令使自己成为一个公钥/私钥对
  • 将私钥保存在所有服务器的
    .ssh/authorized_keys
    文件夹中
  • 现在您无需输入密码即可连接到任何服务器,这是我们的首要目标

    现在,您可以使用以下语法向服务器发送命令:

    ssh username@serverid 'command'
    
    这里有一个很好的简短描述

    因此,您只需将25个命令连接到一个文件中,然后启动该文件,如下所示:

    ssh user@server1.yourservers.com 'service ourservice stop'
    ssh user@server2.yourservers.com 'service ourservice stop'
    

    使用/usr/bin/expect可能很好。通常,您希望使用公钥/私钥来实现自动化,而不是密码。@melpomene,那么他如何才能在每台服务器上调用
    service stop
    。melpomene在评论中给出的答案显然是您的最佳选择。您的答案:谢谢@misterakko(+1)-如果我真的想在每台服务器上运行shell脚本,您能确认命令是:
    ssh吗root@server1.yourservers.com“/运行myscript.sh”
    ?再次感谢!允许root用户从ssh登录不是一个好主意!幸运的是,在合理的ssh服务器上默认情况下,这是关闭的。@gniourf_gniourf安全性不是原始问题中的一个因素。就我个人而言,我关闭防火墙上的SSH端口,用于除办公室固定IP之外的任何IP,因此我不担心以根用户身份使用SSH。和往常一样,安全性意味着不方便的工作,因此您可以选择找到的最佳折衷方案。OP的登录名是
    用户
    ,而不是
    根用户
    。现在,你可以对你的服务器做任何你想做的事情,但我不希望在给新手用户的答案中看到root登录。有人吗?这就是我运行脚本的方式吗?