2012-07-10 199 views
2

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

#!/bin/bash 
for i in `seq 100` 
do 
ssh [email protected] 
sleep 1 
done 

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

运行像ssh [email protected] './command.sh'这样的任何命令都不适用于我。

我想通过它的PID杀死它,或者用一些文件描述符调用它,但我仍然通过调用的ssh连接阻止了本地会话。

+0

请澄清“运行任何命令,如ssh test @ macintel'./command.sh'不适用于我” - 出了什么问题?你尝试过哪些命令? – 2012-07-10 15:41:23

+0

我的意思是用法运行非登录shell,而我需要它作为登录shell。这是因为我们有软件可以查出它并且整个案例都是关于登录loggins的。但是当我运行ssh test @ macintel时,由于连接到另一个客户端,我的当前widnow/session被“阻塞”,我不知道如何自动断开这个for循环中的连接。 – modzello86 2012-07-13 08:01:24

回答

1
ssh -l root 192.168.22.250 -C "./command.sh" 

使用-C选项穿过你想在远程机器上执行命令,

+0

这与通过简单的ssh root @ machine登录有点不同。正如我前面提到的那样,我们使用一些软件来关闭物理登录或登录。所以任务是登录然后以某种方式中断连接(或退出0)。按照您的建议运行某些命令对我无效。 – modzello86 2012-07-10 14:11:08

1

未经检验的,但改变macintel默认的shell注销,让你尽快注销您登录:

sudo chmod -s logout test 

该命令必须在macintel因为注销是不是一个标准的shell以root身份运行。

0

这适用于红帽框:

#!/bin/bash 
for i in seq 100 
do 
ssh [email protected] "/path/command.sh;exit" 
done 
+0

同样的事情..请求“exec”而不是“shell” – modzello86 2012-07-11 09:44:35

0

Accorrding到ssh -vv这里记录的内容被调用 如果ssh -vv [email protected] "command;exit"输出SSH的说明:

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

而调用ssh -v [email protected]输出:

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:您的解决方案似乎没问题,但我不能以这种方式更改帐户设置。无论如何感谢您的想法。