我有一个可以通过 SSH 进行管理的嵌入式设备(Perle IOLAN+,以太网转串行适配器)。有时,我需要登录并在此设备上执行命令。通过 SSH 登录、获取交互式 shell 并运行命令都很顺利并且运行良好。
但是,我想自动化该过程,并在我的服务器上有一个脚本登录并定期为我运行此命令。我正在测试是否可以通过 SSH 远程执行,但似乎不能。
我想要运行的命令是kill line *
.在我的服务器上,我尝试ssh user@device_host kill line *
。但预期的结果并没有发生。当我尝试时,ssh user@device_host uptime
我没有得到任何输出,即使uptime
在设备的交互式 shell 中工作正常。
该设备没有运行完整、正常的操作系统 - 它是某种嵌入式、精简的 *nix,只有很少的可用命令。我想知道它的 SSH 服务器是否可能无法识别远程命令执行。有什么方法可以检查吗?精简版 SSH 服务器是否经常缺乏此功能?
是否有另一种方法可以在不通过交互式 shell 的情况下远程执行命令?
ssh 与 -vv 的输出是:
$ ssh -vv user@remote_host 正常运行时间 OpenSSH_6.4、OpenSSL 1.0.1e-fips 2013 年 2 月 11 日 debug1:读取配置数据/etc/ssh/ssh_config debug1: /etc/ssh/ssh_config 第 51 行:应用 * 的选项 调试2:ssh_connect:needpriv 0 debug1:连接到remote_host [remote_host]端口22。 debug1:连接已建立。 debug1:身份文件 /home/raven/.ssh/id_rsa 类型 -1 debug1:身份文件 /home/raven/.ssh/id_rsa-cert 类型 -1 debug1:身份文件 /home/raven/.ssh/id_dsa 类型 -1 debug1:身份文件 /home/raven/.ssh/id_dsa-cert 类型 -1 debug1:身份文件 /home/raven/.ssh/id_ecdsa 类型 -1 debug1:身份文件 /home/raven/.ssh/id_ecdsa-cert 类型 -1 debug1:启用协议2.0的兼容模式 debug1:本地版本字符串SSH-2.0-OpenSSH_6.4 debug1:远程协议版本2.0,远程软件版本OpenSSH_5.9 debug1:匹配:OpenSSH_5.9 pat OpenSSH_5* debug2: fd 3 设置 O_NONBLOCK debug1:SSH2_MSG_KEXINIT 已发送 debug1:收到 SSH2_MSG_KEXINIT 调试2:kex_parse_kexinit: ---- 被剪断 - 很多 kexinit 消息 ---- debug2:kex_parse_kexinit:first_kex_follows 0 debug2: kex_parse_kexinit: 保留 0 debug2: mac_setup: 找到 hmac-md5 debug1: kex: 服务器->客户端 aes128-cbc hmac-md5 无 debug2: mac_setup: 找到 hmac-md5 debug1: kex: 客户端->服务器 aes128-cbc hmac-md5 无 debug1:发送 SSH2_MSG_KEX_ECDH_INIT debug1:期待 SSH2_MSG_KEX_ECDH_REPLY debug1:服务器主机密钥:RSA 6c:4c:41:a3:d2:04:66:a1:e8:66:2d:35:4c:79:6a:98 debug1:主机“remote_host”已知并且与 RSA 主机密钥匹配。 debug1:在 /home/raven/.ssh/known_hosts:4 中找到密钥 debug1:ssh_rsa_verify:签名正确 调试2:kex_derive_keys debug2: set_newkeys: 模式 1 debug1:SSH2_MSG_NEWKEYS 已发送 debug1:期待 SSH2_MSG_NEWKEYS debug2: set_newkeys: 模式 0 debug1:收到 SSH2_MSG_NEWKEYS debug1:服务器不允许漫游 debug1:已发送 SSH2_MSG_SERVICE_REQUEST debug2:service_accept:ssh-userauth debug1:收到 SSH2_MSG_SERVICE_ACCEPT debug2:密钥:/home/raven/.ssh/id_rsa((nil)), debug2:密钥:/home/raven/.ssh/id_dsa((nil)), debug2:密钥:/home/raven/.ssh/id_ecdsa((nil)), debug1:可以继续的身份验证:公钥、密码、键盘交互 debug1:下一个身份验证方法:publickey debug1:尝试私钥:/home/raven/.ssh/id_rsa debug1:尝试私钥:/home/raven/.ssh/id_dsa debug1:尝试私钥:/home/raven/.ssh/id_ecdsa debug2:我们没有发送数据包,禁用方法 debug1:下一个身份验证方法:键盘交互 调试2:userauth_kbdint debug2:我们发送了键盘交互数据包,等待回复 调试2:input_userauth_info_req debug2:input_userauth_info_req:num_prompts 1 密码: 调试2:input_userauth_info_req debug2:input_userauth_info_req:num_prompts 0 debug1:身份验证成功(键盘交互)。 已向 remote_host ([remote_host]:22) 进行身份验证。 debug1:通道 0:新 [客户端会话] debug2: 通道 0: 发送打开 debug1:请求[电子邮件受保护] debug1:进入交互会话。 debug2:回调开始 debug2: fd 3 设置 TCP_NODELAY 调试2:client_session2_setup:id 0 debug1:发送环境。 debug1:发送环境 LANG = en_GB.UTF-8 debug2:通道 0:请求环境确认 0 debug1:发送命令:正常运行时间 debug2:通道0:请求执行确认1 debug2:回调完成 debug2:通道 0:打开确认 rwindow 0 rmax 32768 debug2: 通道 0: rcvd 调整 2097152 debug2:channel_input_status_confirm:类型 99 id 0 debug2:在通道 0 上接受执行请求 debug1:client_input_channel_req:通道0 rtype退出状态回复0 debug1: client_input_channel_req: 通道 0 rtype[电子邮件受保护]回复 0 debug2: 通道 0: rcvd eow debug2:通道 0:close_read debug2:通道 0:输入打开 -> 关闭 debug2: 通道 0: rcvd eof debug2:通道 0:输出打开 -> 漏极 debug2: 通道 0: obuf 空 debug2: 通道 0: close_write debug2:通道 0:输出漏极 -> 关闭 debug2: 通道 0: rcvd 关闭 debug2:通道 0:几乎死了 debug2: 通道 0: gc: 通知用户 debug2: 通道 0: gc: 用户分离 debug2: 通道 0: 发送关闭 debug2: 通道 0: 已死 debug2:通道 0:垃圾收集 debug1:通道 0:空闲:客户端会话,nchannels 1 已传输:发送 2472 个字节,接收 1816 个字节,0.8 秒 每秒字节数:发送 3032.4,接收 2227.7 debug1:退出状态0
答案1
其中的ssh user@device_host kill line *
“*”在发送到服务器之前由本地 shell 进行解释。您必须像这样引用命令:
ssh user@device_host 'kill line *'