때로는 여러 서버에 로그인하고 루트로 전환해야 할 때도 있습니다.
이제 내 SSH 구성은 다음과 같습니다
Host *
User xxx
Port 32200
Host hostnamexxx
HostName xxx.xxx.xxx.xxx
IdentityFile /root/.ssh/id_rsa
서버에만 로그인하고 비밀번호를 사용하여 자동으로 루트로 전환하도록 로컬(ssh) 구성을 변경할 수 있습니까?
그러나 암호화되지 않은 파일에 비밀번호를 저장하는 것은 덜 안전한 방법처럼 보입니다.
답변1
로그인 후 루트로 "전환"하는 대신 에 루트로 로그인할 수 있습니다 ssh
.
구성 파일에 다음 줄을 추가할 수 있습니다 User root
.
Host hostnamexxx
HostName xxx.xxx.xxx.xxx
User root
IdentityFile /root/.ssh/id_rsa
이는 호스트 이름xxx에 액세스하려고 하면 ssh
루트로 직접 로그인을 시도한다는 의미입니다. 이는 다음 ssh
명령을 실행하는 것과 동일합니다.
$ ssh -i /root/.ssh/id_rsa -l root hostnamexxx
그러나 파일은 보호되어 루트로만 읽을 수 있으므로 파일을 사용할 수 없으며 대상 호스트에서 /root/.ssh/id_rsa
비밀번호를 묻습니다 .root
$ ssh -i /root/.ssh/id_rsa -l root hostnamexxx
Warning: Identity file /root/.ssh/id_rsa not accessible: Permission denied.
Password:
비밀번호를 입력 하면 root
대상에 루트로 로그인됩니다.
비밀번호를 제공하고 싶지 않다면 (물론 권한이 있다고 가정 ) root
에서 홈 폴더로 ID 파일을 복사 하고 소유자를 사용자로 변경할 수 있습니다./root/.ssh/id_rsa
sudo
root
$ sudo cp /root/.ssh/id_rsa $HOME/.ssh/root_id_rsa && sudo chown <your username> $HOME/.ssh/root_id_rsa
그런 다음 $HOME/.ssh/root_id_rsa
으로 사용하십시오 IdentityFile
.
답변2
expect
나는 여기서 이 일을 처리할 수 있다는 것을 알았다질문및 기타 소스.
#!/usr/bin/expect
set HOSTNAME [lindex $argv 0]
spawn ssh -t $HOSTNAME su -
# expect "密码:"
log_user 0
send "xxxxx\r"
interact
원하는 경우 이 스크립트에 대한 별칭을 설정할 수 있습니다.
alias sshr="/root/expect_ssh.sh"
이 스크립트는 내 SSH 구성과 잘 작동하지만 명령에 따라 일부 변경이 필요할 수 있습니다 spawn ssh
.
불행하게도 나는 예상 스크립트에 대해 잘 알지 못하며 위 스크립트에는 개선이 필요할 수 있는 일부 영역이 있습니다.
expect "密码:"
작동하지 않아서 , 로 변경했습니다Password:
.Password:
쓸모 없는.log_user 0
물론 비밀번호를 숨기고 전송된 출력을 억제 해 보았습니다 . 그러나 성공하지 못했습니다.