多个SSH到远程服务器+多个远程命令

时间:2015-03-31 09:09:39

标签: bash shell ssh scp remote-server

我有一个可以通过SSH连接的40台服务器列表。我想要做的是登录每个目录并创建一个目录并将一个文件从我的机器复制到所有40台服务器机器。我写了这段代码,但它只是打开一个窗口并关闭它。

#!/bin/bash

filename="$1"
while read -r line
do
    name=$line
    gnome-terminal -e "ssh -t -t xyz@$name -i ~/.ssh/id_rsa && mkdir test  && scp client_google.py xyz@$name:/home/xyz/test"
    #sleep 5s
    echo "Name read from file - $name"
done < "/home/papps/nodes.txt"

Nodes.txt包含服务器的40个ip地址列表。

注意:在上面提到的代码中,我收到一条警告,指出身份文件不可用(id_rsa)。请帮忙,我哪里错了?感谢。

2 个答案:

答案 0 :(得分:0)

应该使用命令来为ssh提供通过其标准输入远程执行的命令。请查看以下方式:

#!/bin/bash

filename="$1"
while read -r line
do
    name=$line
    gnome-terminal -e "ssh -t -t xyz@$name -i ~/.ssh/id_rsa -n 'mkdir ~/test' && scp client_google.py xyz@$name:/home/xyz/test"
    #sleep 5s
    echo "Name read from file - $name"
done < "/home/papps/nodes.txt"

答案 1 :(得分:0)

SFTP比普通SSH更适合操作远程文件。这样的事情应该有效:

#!/bin/bash
filename="$1"
while read -r line
do
    name=$line
    gnome-terminal -e "{
            echo mkdir test
            echo put client_google.py test/client_google.py
        } | sftp -b - -i ~/.ssh/id_rsa xyz@$name"
    echo "Name read from file - $name"
done < "/home/papps/nodes.txt"

sftp -b - -i ~/.ssh/id_rsa xyz@$name以批处理模式运行sftp,从标准输入(-b - )读取。两个echo命令为SFTP程序提供输入。在批处理模式下,如果mkdir命令失败,sftp将退出。