我使用Python pexpect(和winpexpect)来执行ssh
命令$.validator.addMethod(
"usDate",
function(value, element) {
// date mm/dd/yyyy
return value.match(/^(0[0-9]|1[0-2])[\/](0[0-1]|1[0-9]|2[0-9]|3[0-1])[\/]\d{4}$/);
}
);
如何关闭self.spawn以确保ssh会话已关闭? 对于Windows和UNIX,跨平台有什么方法?
答案 0 :(得分:1)
优雅的方式是发送exit\r
或CTRL-D
并等待EOF
。但是在完成SSH会话之后退出脚本(Expect,pexpect或winexpect)并且不关心SSH会话的退出状态也没关系。当脚本退出时(无论是否清除),操作系统内核将为您关闭SSH会话(TCP连接)。 SSH服务器永远不会抱怨这一点。
pexpect.spawn.close()
将关闭pty,而pty会将SIGHUP
发送到shell,而shell将终止(终止)shell,除非shell忽略SIGHUP
。这就像你在shell运行时关闭PuTTY
(或gnome-terminal
,...)窗口。
以上陈述假设所有应用程序(Expect,pexpect,winexpect和SSH服务器)都得到了很好的实现。我有一个系统,当SSH连接未完全关闭时,SSH 服务器无法回收已分配的PTY。因此,经过一段时间后,虽然SSH身份验证成功,但我无法再获得PTY。
答案 1 :(得分:0)
如果你的目标只是通过SSH执行命令,你也可以考虑使用Paramiko:
import paramiko
# Create a new client
client = paramiko.SSHClient()
# Connect to your remote
client.connect('127.0.0.1', username='john', password='doe')
# Execute a command
stdin, stdout, stderr = ssh.exec_command("pwd")
# Do anything you want with `stdout` and `stderr`
# Execute as many other commands as you want
# When you are done, close your connection
client.close()
这是一个纯Python包,每当我使用它时都能很好地工作。