通过 ssh 运行 systemctl 而不询问密码

通过 ssh 运行 systemctl 而不询问密码

我想在不要求密码的情况下运行 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)

相关内容