2017-02-10 11 views
0

SSHをPythonで接続しようとしています。私はエラーを取り除くためにまだ苦労して、さまざまな方法を使用してエラーを削除しようとしました。これは私のコードです:SSH用にpxsshを使用しているときにPythonコードでエラーが発生しました

1) import pxssh 
    import getpass 
    def get_ssh(): 
    s= pxssh.pxssh() 
    hostname = raw_input('IP: ') 
    username = raw_input('username: ') 
    password = getpass.getpass('password: ') 
    s.login (IP, username, password) 
    s.logout() 
    return True 

2) s= pxssh.pxssh(timeout='time_out', maxread=20000) 
    s.SSH_OPTS += " -o StrictHostKeyChecking=no" 
    s.SSH_OPTS += " -o UserKnownHostsFile=/dev/null" 
    s.login ('IP', 'username', 'password') 

両方とも私は同じエラーが発生しています。また、秘密鍵と公開鍵を認証に渡す方法についていくつかの情報が必要です:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "mit_test.py", line 11, in get_ssh 
    s.login (hostname, username, password) 
    File "/usr/lib/python2.7/dist-packages/pxssh.py", line 196, in login 
    i = self.expect(["(?i)are you sure you want to continue connecting", original_prompt, 
    "(?i)(?:password)|(?:passphrase for key)", "(?i)permission denied", "(?i)terminal type", 
    TIMEOUT, "(?i)connection closed by remote host"], timeout=login_timeout) 
    File "/usr/lib/python2.7/dist-packages/pexpect.py", line 1316, in expect 
    return self.expect_list(compiled_pattern_list, timeout, searchwindowsize) 
    File "/usr/lib/python2.7/dist-packages/pexpect.py", line 1330, in expect_list 
    return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize) 
    File "/usr/lib/python2.7/dist-packages/pexpect.py", line 1401, in expect_loop 
    raise EOF (str(e) + '\n' + str(self)) 
pexpect.EOF: End Of File (EOF) in read_nonblocking(). Exception style platform. 
<pxssh.pxssh object at 0x2840ad0> 
version: 2.4 ($Revision: 516 $) 
command: /usr/bin/ssh 
searcher: searcher_re: 
    0: re.compile("(?i)are you sure you want to continue connecting") 
    1: re.compile("[#$]") 
    2: re.compile("(?i)(?:password)|(?:passphrase for key)") 
    3: re.compile("(?i)permission denied") 
    4: re.compile("(?i)terminal type") 
    5: TIMEOUT 
    6: re.compile("(?i)connection closed by remote host") 

私は正確に何をしなければなりませんか?私は他のいくつかのコメントを検索しましたが、解決策を見つけることができませんでした。また、ログイン引数に秘密鍵のパスを設定する方法はありますか?誰でも助けてくれますか?私は別の投稿を行ったlink [リンク](EOF when using pexpect and pxssh)しかし、解決策を得ることができませんでした。あなたの時間をありがとう。

+0

プログラムと同じユーザーの同じホストからのSSH接続が他に機能する場合は試しましたか? – marekful

+0

また、ホストキーチェックで新しいホストが見つかった場合は、この場合のように、最初に端末に「はい」と入力して認証に進む必要があります。 [SSHオプション](http://linuxcommand.org/man_pages/ssh1.html)( '-O')で無効にすることができます – marekful

+0

はい私は同じホストのユーザー名とパスワードでデータベースを構成しています。今私は、Pythonを使ってSSHトンネルを作りたいと思っています。 –

答えて

0

あなたのプログラムが接続しようとしているホストは、接続先の新しいホストです。まず、認証に進む前にホストの鍵を受け入れる必要があります。ターミナルでは、これは 'yes'とタイプする必要があります。 SSHオプションを使用してホスト鍵のチェックをオフにすることができます。

s = pxssh.pxssh(options={ 
    "StrictHostKeyChecking": "no"}) 
+0

私は両方の方法でオプションを渡そうとしました1)s = pxssh.pxssh(options = { "StrictHostKeyChecking": "no"})および2)s = pxssh.pxssh(タイムアウト= 'time_out'、maxread = 2000000)s.SSH_OPTS + = "-o StrictHostKeyChecking = no" s.SSH_OPTS + = "-o UserKnownHostsFile =/dev/null "しかし、まだ同じエラーが表示されます。私はログイン情報に公開鍵と秘密鍵を渡す方法を知らない。 –

+0

私は成功しparamikoを使用して行っている: 'DEF connect_ssh(): C = paramiko.SSHClient() c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) c.connect( '151.252.41.105'、ポート= 22、ユーザ名= 'user'、password = 'password'、key_filename = '/home/ulw/.ssh/id_rsa') return c c = connect_ssh() stdin、stdout、stderr = c.exec_command( "ls -la") print stdout.readlines() ' –

関連する問題