Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
脚本在执行SSH后停止_Ssh_Scripting - Fatal编程技术网

脚本在执行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将打开一个

当我对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
将打开一个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发生了变化,我们必须在其他地方提供信息,但是在第二台机器上无法处理。我完全不理解你的第二句话。