パーソナルノートブックからリモートワークスペースにアクセスするためのパスワードなしの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など)を追加できます。
役に立ったことを願っています!