[server] .ssh / config에 비밀번호 추가

우분투 12.04를 사용하고 있습니다. 매일 많은 서버에 연결하기 위해 ssh를 사용하고 있으므로 매개 변수를 .ssh / config 파일 에 넣습니다 . 이처럼 :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

각 연결마다이 파일에 비밀번호를 넣는 방법이 있습니까? 따라서 서버가 암호를 요청할 때 터미널은 패스를 넣어 서버로 보내므로 매번 암호를 입력 할 필요가 없습니다. 또한 공개 / 개인 키 쌍을 사용하고 싶지 않습니다.



답변

아니요, openssh 내장 메커니즘을 사용하여 ssh 인증을 위해 비 대화식 방식으로 암호를 명령 줄에 지정하거나 제공하는 방법이 없습니다. 적어도 내가 아는 것은 하나도 없습니다. 암호를 expect 스크립트로 하드 코딩 할 수는 있지만 좋은 해결책은 아닙니다.

Michael이 말한 것처럼 암호가없는 인증을 위해 키 쌍을 사용하고 싶을 것입니다. 결국 개인 키는 파일에서 거의 큰 암호입니다.


답변

일련의 주석을 피하려면 : 예, 이것은 안전하지 않습니다 (논쟁 적으로 안전하지도 않습니다). 격리 된 네트워크의 실습 환경이나 전체 재설정 / 포맷없이 프로덕션 서버 또는 잠재적으로 프로덕션 서버와 관련이없는 유사한 상황에서만 수행하는 것이 좋습니다.

2950 스위치가 개인 / 공개 키를 지원하지 않는다고 생각하고 어느 시점에서 그 지식을 얻을 수 있기를 희망하면서 아직 설정하지 않았지만 아직 거기에 없습니다.

별명과 sshpass를 사용하여이를 수행 할 수 있습니다.

  1. sshpass 설치
  2. 질문에 나열된 사용자 이름을 포함하도록 .ssh / config 파일을 변경하십시오.
  3. 터미널에 별칭을 추가하십시오 (.bashrc를 사용했으며 gloabl 설정을 권장하지 않습니다)
  4. 별명을 사용하여 대상에 로그인

내 예제 별명은 다음과 같습니다.

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를 사용하여 더 안전한 방법 으로이 작업을 수행 할 수 있습니다

  1. 기록없이 비밀번호 설정

    내보내기 PS = your_password ; history -d $ (history 1)

  2. ~ / .ssh / config에서 위와 같이 호스트 별명을 설정하십시오.

  3. ssh pass를 사용하여 환경 변수를 사용하고 단일 명령으로 필요한 시스템에 로그인하십시오.

sshpass -p $ PS ssh를 host_alias

환경에서 비밀번호를 보유하고 있으며 실행중인 스크립트를 모르는 경우 실행중인 스크립트가이 비밀번호를 유출 할 위험이 있습니다.