원격 컴퓨터에 자동으로 로그인하는 방법을 찾아야 합니다. 여러 가지 방법으로 이 작업을 수행할 수 있지만 이는 저에게 약간 까다롭습니다.
원격 컴퓨터에 자동으로 로그인하여 명령이나 스크립트를 실행하고 출력을 로컬 시스템 파일로 리디렉션합니다.
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) 인증을 구성하려고 합니다. 특히 테스트 환경과 프로덕션 환경이 너무 달라야 하는 경우에는 설명하는 워크플로가 악몽처럼 들립니다.