gpt4 book ai didi

linux - 打开 ssh 连接卡住

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:23 24 4
gpt4 key购买 nike

我正在尝试使用 Tcl8.5 脚本打开 ssh 连接,如下所示:

catch {set fh [open "|sshpass -p $password ssh $user@$ip" w+]} catch_output

if {[info exists fh] != 1} {
puts "err - $catch_output"
return 0
}
fconfigure $fh -buffering none -blocking 0

set i 0
while {1} {
puts "iteration $i."
set data [read -nonewline $fh]
append input_sum $data

puts -nonewline $data

after 1000
incr i
}

但是我从远程计算机收到的唯一文本是:

Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.5.0-45-generic i686)

* Documentation: https://help.ubuntu.com/

这就是它卡在的地方......变量 $i 有助于确保代码正在运行。
我已确保使用命令 eof $fh 没有 EOF。

当我手动执行此操作时,我得到(密码、用户和 IP 地址都是虚构的):

$ sshpass -p abcdef ssh root@1.2.3.4
Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.5.0-45-generic i686)

* Documentation: https://help.ubuntu.com/

Last login: Thu Apr 3 11:22:33 2014 from 5.6.7.8
root@MyPC:~#

请注意:我知道还有其他方法可以执行此操作(Expect、keys),但我必须理解为什么这个特定方法不起作用。谢谢。

最佳答案

我针对我的一台服务器 Ubuntu 10.04.4 LTS 测试了您的代码,但我根本没有收到任何登录消息。

然后我在 fconfigure 之后添加了 puts $fh "ls -l",文件列表出现在消息“iteration 2”之后。

所以你的问题只是 ssh 根据调用环境的不同行为。

没有任何问题,而且这是有道理的:您通常不希望名为 ssh 的脚本中出现登录标题,而只希望命令输出。

不过,我没有完成大量的配置和命令行选项。而且我的机器上没有 sshpass,我只是使用 ssh 并通过 ssh-agent 进行身份验证。

顺便说一句,这样写捕获:

if {[catch {mycommand param1} catchres]} then {
puts stderr $catchres
} else {
# no error, contine
}

关于linux - 打开 ssh 连接卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22837506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com