우분투 12.04를 사용하고 있습니다. 매일 많은 서버에 연결하기 위해 ssh를 사용하고 있으므로 매개 변수를 .ssh / config 파일 에 넣습니다 . 이처럼 :
Host server1
User tux
Port 2202
HostName xxx.x.xx.x
각 연결마다이 파일에 비밀번호를 넣는 방법이 있습니까? 따라서 서버가 암호를 요청할 때 터미널은 패스를 넣어 서버로 보내므로 매번 암호를 입력 할 필요가 없습니다. 또한 공개 / 개인 키 쌍을 사용하고 싶지 않습니다.
답변
아니요, openssh 내장 메커니즘을 사용하여 ssh 인증을 위해 비 대화식 방식으로 암호를 명령 줄에 지정하거나 제공하는 방법이 없습니다. 적어도 내가 아는 것은 하나도 없습니다. 암호를 expect 스크립트로 하드 코딩 할 수는 있지만 좋은 해결책은 아닙니다.
Michael이 말한 것처럼 암호가없는 인증을 위해 키 쌍을 사용하고 싶을 것입니다. 결국 개인 키는 파일에서 거의 큰 암호입니다.
답변
일련의 주석을 피하려면 : 예, 이것은 안전하지 않습니다 (논쟁 적으로 안전하지도 않습니다). 격리 된 네트워크의 실습 환경이나 전체 재설정 / 포맷없이 프로덕션 서버 또는 잠재적으로 프로덕션 서버와 관련이없는 유사한 상황에서만 수행하는 것이 좋습니다.
2950 스위치가 개인 / 공개 키를 지원하지 않는다고 생각하고 어느 시점에서 그 지식을 얻을 수 있기를 희망하면서 아직 설정하지 않았지만 아직 거기에 없습니다.
별명과 sshpass를 사용하여이를 수행 할 수 있습니다.
- sshpass 설치
- 질문에 나열된 사용자 이름을 포함하도록 .ssh / config 파일을 변경하십시오.
- 터미널에 별칭을 추가하십시오 (.bashrc를 사용했으며 gloabl 설정을 권장하지 않습니다)
- 별명을 사용하여 대상에 로그인
내 예제 별명은 다음과 같습니다.
alias ssc='sshpass -pcisco ssh'
여기서 “cisco”는 비밀번호입니다. -p와 비밀번호 사이에는 공백이 없습니다.
사용법은 (질문을 참조하십시오) :
ssc server1
참고 : 검색 엔진을 사용하는 사용자에 대해서만 제목에 대한 질문에 답변합니다. 질문 예와 같은 서버를 사용하는 경우이 답변이 아닌 개인 / 공개 키 쌍을 사용해야합니다.
답변
예, 위에서 언급했듯이 비밀번호를 간단히 저장할 수있는 방법이 없습니다. 권한 부여에 ssh 키를 사용하는 것이 좋습니다.
먼저 키를 생성하십시오.
ssh-keygen
그런 다음 서버 / 데스크탑에서 키를 복사하십시오.
ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:
그게 다야. 비밀번호를 다시 묻지 않습니다.
또한 일반적으로 비밀번호 인증을 제거하는 것이 좋지만 귀하에게 달려 있습니다.
답변
ssh 로이 작업을 수행 할 수있는 방법이 없습니다. 얻을 수있는만큼 안전하지 않습니다.
Danila가 언급했듯이 expect 스크립트를 사용할 수는 있지만 귀찮게하지는 않습니다.
당신이 무엇을 달성하려고하는지 궁금합니다. 한 서버에서 다른 서버로 홉핑 하시겠습니까? 이 경우 워크 스테이션에서 ssh-agent를 설정 및 사용하고 대상 호스트에서 에이전트 전달을 사용 가능하게합니다. 이런 식으로 자격 증명 교환은 개인 키를 복사하지 않고도 로컬 에이전트로 라우팅됩니다.
답변
~/.local/bin
디렉토리 에서이 스크립트를 사용합니다
#!/usr/bin/bash
ORIG_SSH=/usr/bin/ssh
HOST=$1
SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
export SSHPASS
sshpass -e $ORIG_SSH $@
else
$ORIG_SSH $@
fi
파일 #PS <password>
에서 와 같이 암호를 지정할 수 .ssh/config
있습니다.
그러나 모두가 말했듯 이 가능하면 ssh-keys
함께 사용 하는 것이 좋습니다ssh-agent
답변
이 상황을 처리하는 올바른 방법은 세션 기반 ssh-agent를 사용하는 것입니다. 방법은 다음과 같습니다.
$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:
그런 다음 암호는 나머지 세션 동안 유효하게 유지됩니다. 첫 번째 명령 만 한 번만 실행하면 그 이후에 원하는만큼 키를 추가 할 수 있습니다. 세션이 종료되면 에이전트도 종료되므로 하드 코딩 된 비밀번호 스토리지가 없습니다.
오래지 않아이 답변이 여기에 없다는 사실에 충격을 받았습니다!
답변
sshpass를 사용하여 더 안전한 방법 으로이 작업을 수행 할 수 있습니다
-
기록없이 비밀번호 설정
내보내기 PS = your_password ; history -d $ (history 1)
-
~ / .ssh / config에서 위와 같이 호스트 별명을 설정하십시오.
-
ssh pass를 사용하여 환경 변수를 사용하고 단일 명령으로 필요한 시스템에 로그인하십시오.
sshpass -p $ PS ssh를 host_alias
환경에서 비밀번호를 보유하고 있으며 실행중인 스크립트를 모르는 경우 실행중인 스크립트가이 비밀번호를 유출 할 위험이 있습니다.