如何在命令行参数中接受密码,以便使用python进行ssh登录

如何在命令行参数中接受密码,以便使用python进行ssh登录,python,linux,ssh,Python,Linux,Ssh,我正在使用ssh登录到远程设备。我有一个python脚本。我运行的命令是: ./python_script.py sshdevice@ip_address 我想使用此脚本的一个参数创建密码。我的python脚本中有以下内容 try: p = subprocess.Popen( ['ssh', '-s', '-l', '<name1>', <host_name>, '-p', str(port), '<something>'],

我正在使用ssh登录到远程设备。我有一个python脚本。我运行的命令是:

./python_script.py sshdevice@ip_address

我想使用此脚本的一个参数创建密码。我的python脚本中有以下内容

try:
    p = subprocess.Popen(
        ['ssh', '-s', '-l', '<name1>', <host_name>, '-p', str(port), '<something>'],
        bufsize=BUFSIZE,
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
        shell=False)
except Exception, err:
    print 'Failed to run ssh command! (' + str(err) + ')'
    sys.exit()
试试看:
p=子进程Popen(
[ssh'、'-s'、'-l'、'-p',str(端口),'''],
bufsize=bufsize,
stdin=子流程.PIPE,
stdout=子流程.PIPE,
stderr=subprocess.STDOUT,
外壳=假)
除例外情况外,错误:
“打印”无法运行ssh命令!(“+str(err)+”)”
sys.exit()

我不知道我的问题是否清楚,但我想知道如何让我的ssh脚本接受密码参数。我想使用
sys.argv[]

从python脚本访问它,请考虑以下用法:

./python_script.py ssh device@ip_address passwd
现在,您可以通过以下方式访问参数:

import sys

if len(sys.argv) < 4:
    print("Not enough arguments!")
    sys.exit()

ssh        = sys.argv[1]
device     = sys.argv[2].split("@")[0]
ip_address = sys.argv[2].split("@")[1]
passwd     = sys.argv[3]
导入系统 如果len(sys.argv)<4: 打印(“参数不足!”) sys.exit() ssh=sys.argv[1] device=sys.argv[2]。拆分(“@”)[0] ip_地址=sys.argv[2]。拆分(“@”)[1] passwd=sys.argv[3] 要调用带有密码的
ssh
命令,您需要
sshpass


希望这有帮助

python中有一个名为fabric的库。只要阅读它,您就会知道如何做到这一点。
或者通过github安装ssh pass,也是出于同样的目的。

所以这是对我有效的最终解决方案。 我使用

sudo-apt-get-install-sshpass

那么我修改的代码如下。正如linusg在上面的回答中建议的那样,我从命令行获取了密码

try:
    p = subprocess.Popen(
    ['sshpass','-p',password,'ssh', '-s', '-l', '<name1>', <host_name>, '-p', str(port), '<something>'],
    bufsize=BUFSIZE,
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    shell=False)
except Exception, err:
    print 'Failed to run ssh command! (' + str(err) + ')'
    sys.exit()
试试看:
p=子进程Popen(
['sshpass'、'-p',password、'ssh'、'-s'、'-l'、'-p',str(端口),'''],
bufsize=bufsize,
stdin=子流程.PIPE,
stdout=子流程.PIPE,
stderr=subprocess.STDOUT,
外壳=假)
除例外情况外,错误:
“打印”无法运行ssh命令!(“+str(err)+”)”
sys.exit()

我建议您看看Python-LibSSH2:这肯定会解决您的问题:好的。所以,可能是我的问题不清楚。这个答案告诉我如何访问命令行中给出的命令。我的问题是,是否有一种方法可以将password作为ssh的参数之一,这样ssh就不会再次提示输入密码了。否则,我可以对python代码做哪些修改,以使用命令行中给出的密码,这样ssh在登录远程设备时不会要求输入密码。@KalyanamRajashree-我刚才给了你关于sshpass的提示!令人惊叹的!他工作得像个奇迹。谢谢。