我有一个可以通过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)。请帮忙,我哪里错了?感谢。
答案 0 :(得分:0)
#!/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
将退出。