编写一个shell脚本ssh到远程机器并执行命令

我有两个问题:

  • 有多台远程Linux机器,我需要编写一个shell脚本,它将在每台机器上执行相同的一组命令。 (包括一些sudo操作)。 这怎么可以使用shell脚本来完成?
  • 当向远程机器ssh'ing时,如何处理它提示进行RSA指纹认证。
  • 远程机器是在运行时创建的虚拟机,我只有他们的IP。 所以,我不能在这些机器中预先放置一个脚本文件,并从我的机器执行它们。


    有多台远程Linux机器,我需要编写一个shell脚本,它将在每台机器上执行相同的一组命令。 (包括一些sudo操作)。 这怎么可以使用shell脚本来完成?

    你可以用ssh来做到这一点,例如:

    #!/bin/bash
    USERNAME=someUser
    HOSTS="host1 host2 host3"
    SCRIPT="pwd; ls"
    for HOSTNAME in ${HOSTS} ; do
        ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
    done
    

    当向远程机器ssh'ing时,如何处理它提示进行RSA指纹认证。

    您可以将StrictHostKeyChecking=no选项添加到ssh:

    ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"
    

    这将禁用主机密钥检查并自动将主机密钥添加到已知主机的列表中。 如果您不想让主机添加到已知主机文件中,请添加选项-o UserKnownHostsFile=/dev/null

    请注意,这会禁用某些安全检查 ,例如防止中间人攻击。 因此它不应用于安全敏感的环境。


    有很多方法可以解决这个问题。

    我最喜欢的方式是在远程系统上安装http://pamsshagentauth.sourceforge.net/,同时也安装您自己的公钥。 (找出将这些安装在虚拟机上的方法,不知何故,你安装了一个完整的Unix系统,还有多少个文件?)

    在您的ssh代理被转发后,您现在可以在没有密码的情况下登录到每个系统。

    更好的是,该pam模块将使用您的ssh密钥对为sudo进行身份验证,以便您可以根据需要使用root(或任何其他用户)的权限运行。

    您不必担心主机密钥交互。 如果输入不是终端,那么ssh将限制您转发代理和使用密码进行身份验证的能力。

    你也应该看看Capistrano这样的软件包 绝对环顾该网站; 它介绍了远程脚本。

    单独的脚本行可能如下所示:

    ssh remote-system-name command arguments ... # so, for exmaple,
    ssh target.mycorp.net sudo puppet apply
    

    使用apt-get install sshpass然后编辑脚本并按照相应顺序放置您的Linux机器IP,用户名和密码。 之后运行该脚本。 而已 ! 该脚本将在所有系统中安装VLC。

    #!/bin/bash
    SCRIPT="cd Desktop; pwd;  echo -e 'PASSWORD' | sudo -S apt-get install vlc"
    HOSTS=("192.168.1.121" "192.168.1.122" "192.168.1.123")
    USERNAMES=("username1" "username2" "username3")
    PASSWORDS=("password1" "password2" "password3")
    for i in ${!HOSTS[*]} ; do
         echo ${HOSTS[i]}
         SCR=${SCRIPT/PASSWORD/${PASSWORDS[i]}}
         sshpass -p ${PASSWORDS[i]} ssh -l ${USERNAMES[i]} ${HOSTS[i]} "${SCR}"
    done
    
    链接地址: http://www.djcxy.com/p/17511.html

    上一篇: write a shell script to ssh to a remote machine and execute commands

    下一篇: How to SSH to a VirtualBox guest externally through a host?