SSH命令中-l参数用法咨询及pexpect实现SSH的疑问
关于SSH
-l 参数的作用及你的代码问题 嘿,我来帮你理清这个ssh -l的疑惑~其实-l是SSH客户端的标准合法参数,你之前误以为它不合法可能是没接触过这种写法,下面详细解释:
-l 参数的具体作用
-l是login name的缩写,它的作用是指定登录远程主机时使用的用户名,和我们更常用的ssh username@host写法是完全等价的:
- 写法1:
ssh -l alice example.com - 写法2:
ssh alice@example.com
这两个命令的效果一模一样,都是以alice的身份登录example.com主机。
为什么你的代码去掉-l会报错?
看你的原代码:
child = pexpect.spawn('ssh -l %s %s %s'%(user, host, command))
展开后是ssh -l user host ls -l,这个命令的逻辑是:以user身份登录host,登录成功后直接执行ls -l命令,这是完全正确的。
如果去掉-l,命令变成:
child = pexpect.spawn('ssh %s %s %s'%(user, host, command))
展开后是ssh user host ls -l——这时候SSH会把第一个参数user当成目标主机名,把host当成要执行的命令,完全违背了你的意图,自然会抛出错误(比如找不到名为user的主机,或者参数格式不正确)。
可选的优化写法
如果你觉得-l的写法不够直观,也可以改成更常用的user@host格式,代码会更易读:
child = pexpect.spawn('ssh %s@%s %s'%(user, host, command))
这个写法和你原来用-l的代码效果完全一致,不会有任何问题。
内容的提问来源于stack exchange,提问作者huang cheng
相关产品推荐
相关产品推荐

