脚本在执行SSH后停止
当我对for循环中的某台机器执行SSH时,它正在执行SSH,但无法进一步执行。 代码如下:脚本在执行SSH后停止,ssh,scripting,Ssh,Scripting,当我对for循环中的某台机器执行SSH时,它正在执行SSH,但无法进一步执行。 代码如下: string=c01.test.cloud.com,c02.test.cloud.com for i in $(echo $string | sed "s/,/ /g") do ssh -t -t AppAccount@$i cd a/b/c str2=x,y,z done 我从您的问题中了解到,您希望cda/b/c在远程服务器上运行吗?这不是这个脚本要做的。调用ssh将打开一个
string=c01.test.cloud.com,c02.test.cloud.com
for i in $(echo $string | sed "s/,/ /g")
do
ssh -t -t AppAccount@$i
cd a/b/c
str2=x,y,z
done
我从您的问题中了解到,您希望
cda/b/c
在远程服务器上运行吗?这不是这个脚本要做的。调用ssh
将打开一个ssh隧道,并为您提供一个交互式终端连接。然后,它等待该连接终止。(我怀疑如果你按下Control-D,脚本会继续。)你在这里使用-t-t
特别奇怪。为什么要强制远程pty?这会让问题变得更糟(没有那么严重,因为它无论如何都不会起作用,但这似乎与你想要的相反)
我想这就是你的意思:
string=c01.test.cloud.com,c02.test.cloud.com
for i in $(echo $string | sed "s/,/ /g")
do
ssh AppAccount@$i 'cd a/b/c; str2=x,y,z'
done
(当然,这不会做任何事情,但我假设您真正的脚本不仅仅是设置一个shell变量并退出。)关键是您需要将要作为参数运行的脚本传递给ssh。否则它将生成一个交互式shell并等待您关闭它
请注意,如果您的脚本非常复杂,那么将其全部放在一个带引号的字符串中可能会非常不方便。如果您的内部脚本位于自己的文件中,一种简单的处理方法是使用bash-s
从stdin读取脚本:
cat some_script | ssh server 'bash -s'
您也可以使用来实现同样的目的,但这可能会让您觉得太花哨了。您有权在那里连接吗?或者它可能需要密码吗?是的。。如果您在for循环之外从命令行执行ssh命令,会发生什么?“cd a/b/c str2=x,y,z”是你想要做的吗?我认为缺少分号。它可以成功连接到机器列表的第一台机器,但无法执行脚本。。。因为shell发生了变化,我们必须在其他地方提供信息,但是在第二台机器上无法处理。我完全不理解你的第二句话。