パスワードのないSSHは、子プロセスとして実行されたときにパスワードを要求します。

パスワードのないSSHは、子プロセスとして実行されたときにパスワードを要求します。

パーソナルノートブックからリモートワークスペースにアクセスするためのパスワードなしのSSH(keygen)を設定しました。リモートサーバーはパスワードを持つアカウントを使用して接続します。公開/秘密鍵認証を設定すると、このパスワードを入力しなくても接続できます。

subprocess.Popen()このリモートワークスペースにSSHで再接続するためにPythonスクリプトを実行しています。ただし、この期間中はパスワードのないSSHではありません。権限を確認し、キーを削除して再生成してみましたが、まだこの現象が発生します。

以下は関連するPythonコードです。

subprocess.Popen(['ssh', machine_addr, 'cd ' + workspace + \ '; python dispynode.py --serve 1 --clean --dest_path_prefix dispytmp_' + str(i)])

答え1

この質問が4年前に提起されたことを知っていますが、同じ問題に遭遇し、私に合った説明と解決策を見つけたので、この内容は同じ状況の他の人にも役立ちます。

コンテキスト

あなたと同様に、私はクライアント(Raspberry Pi)とサーバー間でSSHキーを生成して共有します。パスワードプロンプトを実行せずにSSH経由で接続できますssh user@server。しかし、私のPythonスクリプトが接続しようとすると、subprocess.Popenパスワードを求めます。

説明する

問題は、何らかの理由でPythonスクリプトを実行する必要があるため、sudoを使用してPythonスクリプトを実行することです。

したがって、sshコマンドはsubprocess.Popenのsshキーで実行され/root/.ssh/id_rsa、生成されサーバーと共有されるキーはにあります/home/user/.ssh/id_rsa

解決策

sshコマンドにパラメーターとして正しいIDファイルを追加してください。

ssh -i /home/user/.ssh/id_rsa user@server

したがって、必要なPython行は次のようになります。

subprocess.Popen(['ssh', '-i', '/home/user/.ssh/id_rsa', 'user@server']

ここに必要なコマンド(cd、mkdirなど)を追加できます。

役に立ったことを願っています!

関連情報