![SSH 두 번 로그인 스크립트](https://linux55.com/image/51099/SSH%20%EB%91%90%20%EB%B2%88%20%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8.png)
스크립트를 사용하여 두 번 로그인해야 하는데 ssh
작동하지 않습니다. 내 스크립트 파일에 있는 내용은 다음과 같습니다.
#!/usr/bin/expect
set login "user"
set addr "address1"
set addr2 "address2"
set pw "password"
spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "$login@host:"
spawn ssh $addr2
expect "$login@$addr\'s password:"
send "$pw\r"
interact
그러나 이것은 오류로 인해 실패합니다.
user@host:~$ ssh: Could not resolve hostname address2: Name or service not known
send: spawn id exp7 not open
while executing
"send "$pw\r""
줄을 변경하면 오류와 함께 실패합니다 spawn ssh $addr2
.exec ssh $addr2
user@host:~$ ssh: Could not resolve hostname address2: Name or service not known
while executing
"exec ssh $addr2"
이 작업을 수행하려면 무엇을 변경해야 합니까?
답변1
이 문제에 대한 해결책을 찾은 후 내 답변을 게시했습니다. 실제로 작동하는 스크립트는 다음과 같습니다.
#!/usr/bin/expect
set login "user"
set addr "address1"
set addr2 "address2"
set pw "password"
spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "$login@host:"
send "ssh $addr2\r"
expect "$login@$addr\'s password:"
send "$pw\r"
interact
spawn ssh $addr2
그래서 기본적으로 줄을 send "ssh $addr2\r"
. 처음 SSH를 연결한 호스트에서 다른 SSH를 시작하는 대신 시작한 곳에서 다른 SSH를 생성하려고 합니다.
답변2
ssh
제공한 호스트 이름을 확인할 수 없어 오류가 발생했습니다. 그런 다음 Expect에 비밀번호를 보내라고 지시하지만 ssh에서 오류가 발생하고 종료되므로 보낼 내용이 없습니다. 따라서 제공한 호스트 이름을 확인할 수 없으므로 확인해야 합니다. 또는 IP 주소로 전환할 수 있습니다. 하지만 "address2"가 누구인지 알 수 없는 이유를 알아내는 것이 더 나을 것입니다.
답변3
SSL 키 생성을 찾습니다. 키 쌍(공개 및 개인)을 생성하고 생성된 개인 키를 시스템에 보관하며 SSH 액세스가 필요한 시스템에 공개 키를 배치합니다. 그러면 ssh는 비밀번호를 묻는 메시지를 표시하지 않으며 이를 기대할 필요도 없습니다.
이것은 다른 시스템에 대해 다른 키 쌍을 생성할 수 있도록 키를 생성하는 데 사용하는 "sskkeygen.sh" 스크립트입니다.
#!/bin/bash
SYSTEM=${1:-boogie}
COMMENT=${2:-"Key for $SYSTEM work"}
ssh-keygen -t dsa -f ~/.ssh/id_dsa.$SYSTEM -C "$COMMENT"
chmod 600 ~/.ssh/id_dsa.$SYSTEM
chmod 600 ~/.ssh/id_dsa.$SYSTEM.pub
~/.ssh/id_dsa.$SYSTEM.pub 키를 원격 시스템에 복사합니다. 주의하세요. 지침에는 모두 키 파일을 복사하라고 나와 있는데, 여러분은 그것을 첨부하고 싶습니다!
그런 다음 어떤 호스트가 어떤 키를 사용하는지 알려주려면 ~/.ssh/config 파일이 필요합니다.
#key: prod
Host 1.2.3.4
IdentityFile ~/.ssh/id_dsa.prod
User meself
#key: dev/test
Host 2.3.1.4
IdentityFile ~/.ssh/id_dsa.dev
User meself
#key: ftp dropbox
Host dropbox.company.com
IdentityFile ~/.ssh/id_dsa.dropbox
User virtualuser
#key: ftp thing
Host aaa.bbb.thing.com
IdentityFile ~/.ssh/id_dsa.think
User neato
#key: work
Host *.work.com
IdentityFile ~/.ssh/id_dsa.work
User workid