Bash 스크립트에서:
source ./expect.sh
예상 코드를 포함하고 있습니다.
#!/bin/bash
/usr/bin/expect <<EOL
spawn ssh-copy-id -i /home/user/.ssh/id_rsa.pub 111.111.111
expect '*?assword*'
send 'thepassword'
interact
EOL
그리고 나는 이것을 얻고 있습니다 :
spawn ssh-copy-id -i /home/user/.ssh/id_rsa.pub 111.111.111.111
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
그런 다음 연결을 시도하면 비밀번호를 묻는 메시지가 나타납니다.
서버를 확인한 결과 "authorized_keys" 파일을 나열할 것으로 예상되므로 키가 업로드되지 않은 것으로 확신합니다.
root@server: ls /home/user/.ssh/
known_hosts
내가 도대체 뭘 잘못하고있는 겁니까?
답변1
문제는 SSH 클라이언트가 stdin이 아닌 터미널에서 직접 비밀번호를 읽는다는 것입니다.
내가 아는 가장 쉬운 방법은 'sshpass'를 설치한 다음 이것을 사용하는 것입니다(Expect 없이):
sshpass -p "thepassword" ssh-copy-id -i /home/user/.ssh/id_rsa.pub [email protected]
답변2
다음 스크립트도 트릭을 수행해야합니다
#!/usr/bin/expect -f
#
# Install RSA SSH KEY with no passphrase
#
set user [lindex $argv 0]
set host [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh-copy-id -i /path/to/your/.ssh/id_rsa.pub $user@$host
expect {
"continue" { send "yes\n"; exp_continue }
"assword:" { send "$password\n"; }
}
실행 가능하게 만들고 다음과 같이 호출해야 합니다.
./ssh-copy-id.exp <user> <host> <password>
귀하의 경우:
./ssh-copy-id.exp root 111.111.111.111 thepassword
답변3
/root/.ssh/authorized_keys
사용자 계정이 아닌 키를 복사하고 있습니다 . 다음 내용을 참고하세요.[email protected]'s password:
답변4
!/usr/bin/env 배쉬
fingerprints(){
/usr/bin/expect -c "set timeout 50; spawn ssh-copy-id -i /root/.ssh/id_rsa.pub -p\ <port num>\ root@$<your server>;
expect {
\"assword: \" {
send \<your pwd>\n\"
expect {
\"again.\" { exit 1 }
\"expecting.\" { }
timeout { exit 1 }
}
}
\"(yes/no)? \" {
send \"yes\n\"
expect {
\"assword: \" {
send \"<your pwd>\n\"
expect {
\"again.\" { exit 1 }
\"expecting.\" { }
timeout { exit 1 }
}
}
}
}
}"
}
지문