Bash 스크립트 및 ssh-copy-id와 함께 Expect를 사용하는 방법

Bash 스크립트 및 ssh-copy-id와 함께 Expect를 사용하는 방법

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

"root"에 대한 설명 외에도 다음과 같은 내용이 있습니다.

  1. 작은따옴표는 예상의 일반 문자입니다. 큰따옴표를 사용하세요
  2. 비밀번호를 보낼 때 "Enter"를 누르는 것을 잊지 마세요.
expect "*?assword*"
send "thepassword\r"

heredoc 본문에 변수나 명령 대체를 삽입해야 하는 경우가 아니면 일반적으로 heredoc 끝 단어를 인용하는 것이 좋습니다.

some command <<'END'
# .............^...^
...
END

답변2

당신은 실행합니다 spawn ssh-copy-id -i /home/user/.ssh/id_rsa.pub 111.111.111. IP 주소가 잘못된 것 같습니다.

답변3

비밀번호 프롬프트에서 볼 수 있습니다. [email protected]루트의 키인 file 을 원격으로 설정하고 있습니다 /root/.ssh/authorized_keys. 루트가 아닌 다른 이름으로 스크립트를 실행하거나 user명시적인 을 제공하면 루트가 아닌 비밀번호 없는 로그인이 허용됩니다.ssh-copy-id ... [email protected]user

관련 정보