비밀번호를 묻지 않고 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)

관련 정보