SSH 키가 금지 된 경우 비밀번호 캐시


46

나는 그것을 계산하기 때문에 ssh를 통해 자주 액세스 해야하는 서버가 있습니다. 이제 컴퓨팅 센터는 SSH 키가 "안전하지 않기"때문에 명시 적으로 금지 합니다. 그들은 다른 사람 앞에서 가능할 때마다 키보드로 암호를 입력하는 것이 로그인하는 것이 훨씬 안전한 방법이라고 생각합니다.

지금; 나는 그들의 마음을 바꿀 수 없다 (나는 시도했다).

GIT가 정의 된 시간 동안 캐시에 비밀번호를 저장할 수있는 방식으로 SSH 비밀번호를 임시로 저장하는 방법이 있습니까?


55
the computing center explicitly forbids SSH-keys because they are "insecure"-문제에 대한 나의 의견? 당신은 분명히 부적절하기 때문에 새로운 서버 호스트를 찾으십시오.
매트 클라크

18
@Matt : "컴퓨팅 센터"는 학계 그리드 시스템처럼 들리는데, 경쟁이 거의없는 것 같습니다
grawity

27
그들은 틀렸다. 계정이 만료되면 ssh 키를 비활성화하는 것을 잊었을 가능성이 있으므로 ssh 키가 문제라고 판단했습니다.
Joshua

10
grawity가 옳다. 국가 슈퍼 컴퓨터이기 때문에 문제가 있습니다. 그만한 가치가 있기 때문에 기계는 훌륭합니다. 여호수아도 아마 옳을 수도 있지만, 그게 어떤 것도 옳지 않습니다
user2667180

7
@TheHansinator 키로거가 설치되어 있으면 ssh 연결을 보호하고 있는지 더 이상 중요하지 않은 지점까지 이미 손상되었습니다. 그러나 publickey인증의 다른 장점도 있습니다. password서버에서 인증 을 비활성화 하면 모든 공격자가 암호를 추측하지 못하게됩니다. 공격자가 이전에 서버의 공개 키를 저장하지 않은 클라이언트에 대해 mitm 공격을 시도하면 인증 publickey을 사용 하는 것보다 훨씬 더 안전하게 보호 할 수 있습니다 password.
kasperd

답변:


63

연결 재사용

SSHv2는 인증 된 동일한 연결이 에이전트 전달 또는 TCP 전달과 같은 보조 채널과 함께 대화식 쉘, 배치 명령, SFTP와 같은 여러 '채널'을 설정할 수 있도록합니다. 서버는 기본적으로 연결 멀티플렉싱을 지원합니다. (관리자가 불만을 제기하는 경우 비밀번호를 어디서나 캐싱하는 것이 아니라 전체 연결을 캐싱하는 것입니다.)

OpenSSH를 사용하면이 ControlMasterControlPath사용할 수있는 옵션 (-M 및 -S)이 있습니다.

  1. 을 사용하여 '마스터'SSH 연결을 시작하십시오 -M. (설정에 아직 ControlPath가 없으므로을 사용하여 명령 줄에 지정해야합니다 -S. 오래 지속되어야하므로 -fN백그라운드로 드롭 할 옵션을 추가합니다 . 기술적으로는 선택 사항입니다.)

    $ ssh foo@bar.example.com -fNMS ~/.ssh/bar.socket
    foo@bar.example.com's password:
    

    로컬 셸로 돌아 왔습니다.

  2. 마스터를 통해 새 연결을 시작하십시오.

    $ ssh foo@bar.example.com -S ~/.ssh/bar.socket
    

    당신은 포함 됐어.

  3. 이 기능을 Git / rsync / SFTP에 유용하게하려면 항상 ControlPath지정할 수 없으므로 구성에서 설정해야합니다 -S.

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
    

이를 자동화 할 수 있습니다. 최근 OpenSSH 버전에는 아직 ControlPersist마스터 연결이없는 경우 백그라운드에서 자동으로 연결이 설정되어 있습니다. 이를 통해 1 단계를 건너 뛰고 평상시처럼 ssh 를 사용할 수 있습니다.

  1. 의 구성 ~/.ssh/config:

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
        ControlMaster auto
        ControlPersist 15m
    
  2. 첫 번째 연결은 비밀번호를 묻습니다.

    $ ssh foo@bar.example.com
    foo@bar.example.com's password:
    [foo@bar:~]$ exit
    
  3. 두 번째는 그렇지 않습니다.

    $ ssh foo@bar.example.com
    [foo@bar:~]$ yay
    

멀티 플렉스 마스터를 제어하려면 (중지 또는 TCP 전달 구성) -O옵션을 사용하십시오 .

최근 PuTTY 버전 에서도 비슷한 방법이 지원됩니다 .


1
이 멋진 답변에 감사드립니다. Google은 항상 ssh-keys로 바뀌었고 올바른 키워드를 알지 못했기 때문에이 문제에 유용하지 않았습니다. 많은 도움이되었습니다!
user2667180

1
말할 것도없이이 구성을 사용하는 경우 계정의 보안을 유지하고 해당 시스템의 채널 파일에 액세스 할 수있는 모든 사용자가 사용자의 피기 백을받을 수 있으므로 .ssh 폴더가 올바르게 잠겨 있어야합니다. 연결하고 서버에 액세스하십시오.
shellster

3
@shellster : ssh-agent의 경우와 마찬가지로 "같은 UID를 가진 사람"을 의미합니다. 의도적으로 소켓 파일의 권한 (기본적으로 0600)을 열더라도 다른 사용자는 "멀티 플렉스 uid 불일치"를 얻습니다.
grawity

3
@shellster 루트를 가진 사람은 키로거를 설치하고 어쨌든 원격 시스템에 대한 암호를 훔치거나 수많은 악의적 인 일을 할 수 있습니다. 로컬 루트가 걱정된다면 SSH 개인 키를 저장하는 것보다 안전하지 않습니다.
amalloy

1
나는 로컬 루트를 위협으로 생각하지 않습니다. 그것이 위협이된다면, 당신은 무엇이든 축배하기 때문입니다. (정부 등급의 스파이와 마찬가지로) 솔직히 로컬 루트는 ssh 클라이언트 ssh 에이전트를 원하는 것으로 바꿀 수 있습니다 . 모든 비밀번호와 개인 키를 /root/.secret에 저장 하시겠습니까? 확실한.
grawity

19

사용하다 sshpass

sshpass ( github , man page )는 암호를 ssh에 자동으로 제공하는 도구입니다. 그것을 사용하는 안전한 방법은 다음과 같습니다.

% echo 'correct horse battery staple' > ~/.ssh/compute_password
% chmod go-rw ~/.ssh/compute_password

% sshpass -f ~/.ssh/compute_password ssh foo@host

암호가 ~/.ssh/compute_password없는 개인 키 파일처럼 암호를 읽습니다 . sshpass전체 명령을 입력하지 않도록 명령을 작은 쉘 스크립트 나 쉘 별명에 넣을 수 있습니다. 슬프게도에서이 작업을 수행 할 방법을 찾지 못했습니다 ~/.ssh/config.

(명령 행에서 직접 비밀번호를 지정할 수도 sshpass있지만, 할 수있는 모든 사람에게 비밀번호가 유출되므로이를 피해야합니다. ps)

다른 방법과 비교

이 접근 방식은 물론 공개 키 인증을 올바르게 설정하는 것보다 덜 안전하지만 이미 알고있을 것입니다.

또한 연결 재사용에 대한 @grawity의 답변보다 안전하지 않지만 대화식으로 비밀번호를 전혀 입력하지 않아도되는 이점이 있습니다.

@grawity의 대답은 암호 및 개인 키 캐싱 (예 :)을 사용하여 pubkey auth의 대안을 고려할 수 ssh-agent있습니다. 그렇다면 내 대답은 개인 키 파일에 암호가없는 pubkey auth의 대안입니다.


3
컴퓨팅 센터의 정책이 "하지만 누군가가 키를 훔칠 수있는 디스크에 키 페어가 저장되어 있습니다!"
grawity

6
@grawity 글쎄, 나쁜 정책은 해결 방법을 더 악화
시킵니다

1
암호를 충분히 긴 임의의 문자 스트림 (예 head -c 16 /dev/urandom | base64: 128 비트)으로 생성하고 다른 시스템에서 사용하지 않는 경우 키와 보안 상 유사합니다. 무차별적인 힘으로 암호화되지 않은 경우 파일에서 사용하기가 쉽습니다. 그들이 파일을 얻는다면 이것은 나쁜 사람에게도 해당됩니다. 유일한 차이점은 암호가있는 그대로 서버로 전송된다는 점입니다. 키는 정확한 개인 키를 공개하지 않고 소유하고 있음을 증명하는 더 나은 수학 방법을 가지고 있으며 사용성 측면에서는 암호가 포함 된 파일을 암호화하기가 더 어렵습니다 (아니오 표준 도구).
ilkkachu

1

비밀번호 관리자를 사용하십시오.

일부 비밀번호 관리자 (예 : KeePassXC)에는 '자동 유형'기능이 있습니다. 비밀번호 관리자에 비밀번호를 저장하고 관리자를 실행할 때 데이터베이스를 잠금 해제하고 ssh비밀번호를 프롬프트 할 때마다 키 조합을 누르면 비밀번호 관리자가 긴 비밀번호를 콘솔에 쓸 수 있습니다.

복사 할 필요가 없으며, 데이터베이스를 잠금 해제하기 위해 비밀번호를 제외하고는 아무것도 기억하지 말고 로그인 할 때마다 30자를 으 깨지 않고 강력한 비밀번호를 사용할 수 있습니다.

https://en.wikipedia.org/wiki/List_of_password_managers 목록에서 즐겨 찾기를 선택할 수 있습니다.


3
자동 유형 기능이 터미널 기반 프로그램에서 제대로 작동하는지 확실하지 않습니다. 탐지는 특정 창 제목을 찾고 자동 타이핑 자체에는 KeePass2가 가지고있는 멋진 "키 안티 깅"기능이없는 것이 가장 좋습니다.
grawity

1
@grawity gnome-terminalssh somehostssh가 암호를 물 을 때 제목을 제목으로 변경 하므로 아무런 문제없이 제목 창을 일치시킬 수 있습니다. 나는 키 방지 기능에 대해 아무것도 모른다. 나는 매일 터미널에서 KeePassXC를 사용하고 있는데 최악의 상황은 목록에서 적절한 계정을 선택하는 것이다.
스티로폼

2
@grawity 안티 키로그 기능은 항목별로 (어떻게 든 많은 프로그램이 붙여 넣기를 지원하지 않는 이유에 따라) 활성화해야합니다.
Bob

0

다른 대안은 GUI ssh 클라이언트를 사용하는 것입니다. Windows에서 명백한 선택은 PuTTY 입니다. Linux 버전의 PuTTY도 있습니다. 특히 Ubuntu와 같은 대부분의 데비안 기반 배포판은 일반적으로 해당 저장소에 PuTTY를 포함합니다.

또 다른 좋은 클라이언트는 Termius 입니다. Windows 및 Linux뿐만 아니라 OSX, iOS 및 Android도 지원합니다. 주로 전화 용으로 설계되었지만 데스크탑 버전은 실제로 매우 좋습니다.

내가 실수하지 않으면 Windows의 유력한 하이퍼 터미널에도 ssh 클라이언트가 내장되어 있지만 오랫동안 창을 사용하지 않았기 때문에 완전히 확신 할 수는 없습니다.

모든 GUI 클라이언트에는 사용자 이름과 비밀번호를 포함한 연결 설정을 저장할 수있는 기능이 있습니다.


2
"GUI 기반"은 PuTTY가 명시 적으로 거부 하는 비밀번호 저장을 자동으로 허용하지는 않습니다 . Windows와 함께 번들로 제공되는 하이퍼 터미널 버전은 Telnet 전용이며 직렬 링크에 중점을 두었습니다. 아마도 SSH를 지원하는 Windows 용 CKermit을 생각하고 있지만 암호 지원이 너무 오래되어 많은 현재 서버에 쉽게 연결할 수 없습니다.
grawity
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.