2개의 점프 호스트/비밀번호를 통한 사전 자동 로그인

2개의 점프 호스트/비밀번호를 통한 사전 자동 로그인

원격 컴퓨터에 자동으로 로그인하는 방법을 찾아야 합니다. 여러 가지 방법으로 이 작업을 수행할 수 있지만 이는 저에게 약간 까다롭습니다.

원격 컴퓨터에 자동으로 로그인하여 명령이나 스크립트를 실행하고 출력을 로컬 시스템 파일로 리디렉션합니다.

ssh remote-host < ./script >> storageinfo_$date.txt

하지만 어려운 부분은 원격 호스트에 직접 연결할 수 없다는 것입니다. 먼저 Jumphost1--> Jumphost2-->에 연결한 다음 --> 에 연결해야 합니다.remote-host

Jumphostx에는 sshkeygen이 활성화되어 있지만 암호 예는 다음과 같습니다. userpass
원격 호스트에는 sshkeygen이 활성화되어 있지 않습니다. 예:remotepass

.ssh/config우리는 다음과 같은 방법으로 파일을 사용하여 이 작업을 수행했습니다 . 지금까지는 테스트 환경에서 성공적이었습니다. 하지만 실제 환경에서는 Expect를 설치하면 안 됩니다.

# cat .ssh/config

Host jump1-*
    User ldap-user
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes
    ServerAliveInterval 60
    ServerAliveCountMax 12

Host jump1-centos01-temporary 
    Hostname 13.1.2.19
    Port 2222

Host jump1-centos01        
    Hostname 1.2.1.18
    Port 22
    ProxyCommand ssh -W %h:%p jump1-centos01-temporary

Host remote-host
    Hostname 12.1.1.8
    ProxyCommand ssh -W %h:%p jump1-centos01
    User root

예상 및 전송 모드를 사용한 SSH 연결

# cat expect.sh 

#!/usr/bin/env expect
set timeout 7
set date [exec date "+%d-%B-%Y"]

spawn sh -c "ssh va1ap-vsns0001n < ./isi.py > storageinfo_$date.txt"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "userpass\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "userpass\r"
expect "Password:"
send "remotepass\r"
interact

답변1

ssh -t $jump1 ssh -t $jump2 ssh -t $tgt

찾고 있는 링크를 얻을 수 있습니다. pty가 할당되었는지 확인하세요. pty는 -t대상에서 명령을 실행해야 하는 경우 일반적으로 할당되지 않습니다.ssh

이 경우 프록시와 프록시 전달이 완전히 적절해 보이므로 다음과 같이 보일 것입니다.

ssh -A -t $jump1 ssh -A -t $jump2 ssh -t $tgt

이것이 효과가 없다면 다음에서 대안 script으로 사용할 수 있습니다.expect일부상태. 예를 들어, echo $passwd | script -q -f -c "ssh -q -t $host sudo -p \"''\" \"$some_command\"이것은 비대화형 목적에 필요한 패턴입니다.

하지만 현실적으로는 특정 유형의 키 기반 인증 또는 SSO(Single Sign-On) 인증을 구성하려고 합니다. 특히 테스트 환경과 프로덕션 환경이 너무 달라야 하는 경우에는 설명하는 워크플로가 악몽처럼 들립니다.

관련 정보