로컬 구성을 사용하여 SSH 로그인 후 자동으로 루트로 전환

로컬 구성을 사용하여 SSH 로그인 후 자동으로 루트로 전환

때로는 여러 서버에 로그인하고 루트로 전환해야 할 때도 있습니다.
이제 내 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_rsasudoroot

$ 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.

불행하게도 나는 예상 스크립트에 대해 잘 알지 못하며 위 스크립트에는 개선이 필요할 수 있는 일부 영역이 있습니다.

  1. expect "密码:"작동하지 않아서 , 로 변경했습니다 Password:. Password:쓸모 없는.
  2. log_user 0물론 비밀번호를 숨기고 전송된 출력을 억제 해 보았습니다 . 그러나 성공하지 못했습니다.

관련 정보