2016-11-20 39 views
1

我使用ssh登錄到遠程設備。我有一個python腳本。我運行的命令是:如何接受使用python的ssh登錄命令行參數的密碼

./python_script.py SSH設備@ip地址

我想用的參數此腳本創建一個密碼。我在我的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() 

我不知道我的問題是否清楚,但我想知道如何讓我的SSH腳本接受密碼參數。我想從使用sys.argv[]

+0

我建議你看一下Python的LibSSH2:https://pypi.python.org/pypi/pylibssh2 –

+0

這肯定會解決你的問題:http://stackoverflow.com/questions/10391859/python-輸出到終端,在ssh登錄 –

回答

1

考慮以下使用python腳本訪問:

./python_script.py ssh [email protected]_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] 

要與密碼一起叫ssh命令,你需要sshpass,as described here

希望這會有所幫助!

+0

好吧。所以,可能我的問題並不清楚。這個答案告訴我如何訪問命令行給出的命令。我的問題是要知道是否有一種方法可以將密碼作爲ssh的參數之一,以便ssh不會再次提示輸入密碼。否則,我可以對我的python代碼進行哪些修改以便在命令行中使用此密碼,以便ssh在登錄到遠程設備時不要求輸入密碼。 –

+0

@KalyanamRajashree - 我只是給你提供了關於sshpass的提示! – linusg

+0

太棒了!像奇蹟一樣工作。非常感謝。 –

1

python中有一個庫叫做fabric.Just閱讀它會告訴你如何做到這一點。 或者通過github安裝ssh-pass,它也是爲了同樣的目的。

+0

sshpass工作。非常感謝。 –

0

所以這是爲我工作的最終解決方案。 我安裝sshpass使用

sudo apt-get install sshpass

然後我修改後的代碼如下。在上面的答案中,我從linusg中提出的命令行中輸入了password

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()