私はパスワードを要求せずにsshを実行し、パスワードを要求せずにsystemctlを呼び出したいと思います。以下を試しました。
ssh -t <user>@<host> "echo <password> | sudo -S systemctl status kubelet"
そして:
sshpass -p '$<password>' ssh -t -o 'StrictHostKeyChecking=no' <user>@<host> 'sudo service kubelet restart
返品:
echo <password> | ssh -tt <user>@<host> "sudo service kubelet restart"
そして:
sshpass -p '$<password>' ssh -t -o 'StrictHostKeyChecking=no' <user>@<host> "echo <password> | sudo -S service kubelet restart"
sudoersにユーザーを追加し、パスワードなしでsystemctlを実行できます。上記のすべてのコマンドは、以下を除いてパスワードを要求します。
sshpass -p '$<password>' ssh -t -o 'StrictHostKeyChecking=no' <user>@<host> 'sudo service kubelet restart
これは私に何のヒントも与えません。うまくいくようですが、何もしません。
リモートシステムで操作が実行されたことを確認するために履歴を確認しましたが、何も実行されませんでした。
編集:あるシステムから別のシステムにキーをコピーせずにパスワードなしでSSHを介してこれを実行したいと思います。
答え1
ホストでファイルを実行し、デフォルトの場所に保存します。
ssh-keygen -t rsa
その後、身分証明書をコピーしてください。
ssh-copy-id root@<host>
その後、コマンドを実行します。
ssh root@<host> systemctl status kubelet
答え2
回答
私はこのソリューションにpython3を使用していますが、エレガントではありませんが、うまくいきます(これはスクリプト全体ではなく関連部分です)。
initiate_restart = [
"echo <password> | sudo -S systemctl restart kubelet",
"echo <password> | sudo -S systemctl restart docker",
]
node = paramiko.SSHClient()
print(node)
node.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
node.connect(hostname=get_ip, username=user_name, password=node_pass)
with open("/tmp/reset_log.log", "a") as f:
f.write(date + ' Restarting ' + 'Node-' + get_ip + "\n")
except:
print("[!] Cannot connect to the SSH Server")
with open("/tmp/reset_log.log", "a") as f:
f.write(date + ' Could not connect to' + ' Node-' + get_ip + "\n")
exit()
for command in initiate_restart:
print("="*50, command, "="*50)
stdin, stdout, stderr = node.exec_command(command)
print(stdout.read().decode())
err = stderr.read().decode()
if err:
print(err)