2

我正在处理 ssh,我的任务是在非交互(?)模式下多次登录到另一个控制台,所以我专门以这种模式登录机器,我必须键入 CTRL-D 才能注销,并且这个操作重复。

 #!/bin/bash  
for i in `seq 100`  
do  
ssh test@macintel  
sleep 1  
done  

有什么办法让我不必手动输入 CTRL-D 来注销?

运行任何类似的命令ssh test@macintel './command.sh'对我都不起作用。

我正在考虑通过它的 PID 杀死它,或者用一些文件描述符调用它,但我的本地会话仍然被调用的 ssh 连接阻塞。

4

4 回答 4

1

未经测试,但将默认 shell 更改macintel为注销,以便您在登录后立即注销:

sudo chmod -s logout test

该命令必须以 root 身份运行,macintel因为 logout 不是标准 shell。

于 2012-07-10T14:27:41.460 回答
1
ssh -l root 192.168.22.250 -C "./command.sh"

使用该-C选项传递您希望在远程机器上执行的命令,

于 2012-07-10T13:58:56.923 回答
0

根据 ssh -vv log here 如果 ssh -vv root@host "command;exit"ssh 的输出显示会调用什么:

debug1: Sending command: command;exit
debug2: channel 0: request exec confirm 1
...
debug2: exec request accepted on channel 0

而调用ssh -v root@host 输出:

debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
...
debug2: shell request accepted on channel 0
Last login: Wed Jul 11 09:11:22 2012 from 192.168.11.2

所以看起来我需要在 ssh 日志记录时调用“shell”。

@chepner:您的解决方案似乎没问题,但我无法以这种方式更改帐户设置。无论如何感谢您的想法。

于 2012-07-11T07:39:25.577 回答
0

这适用于红帽盒子:

#!/bin/bash
for i in seq 100
do
ssh user@server "/path/command.sh;exit"
done
于 2012-07-10T18:31:08.457 回答