입력하지 않고 SSH에 비밀번호를 입력하세요

입력하지 않고 SSH에 비밀번호를 입력하세요

직장에서는 SSH를 통해 원격 시스템에 액세스하고 LDAP 로그인을 통해 일부 웹 인터페이스에 액세스합니다. 1password를 사용하여 비밀번호를 관리하지만 비밀번호 관리자에서 SSH로 비밀번호를 입력하는 쉬운 방법을 찾지 못하는 것 같습니다. 나는 그것을 보았지만 보안이 매우 좋지 않아 내 경우에도 작동하지 않는 sshpass비밀번호를 표시할 수 있습니다 . ps외부 프로그램이나 스크립트에서 SSH를 통해 직접 비밀번호를 입력할 수 있는 방법이 있습니까? 아니면 비밀번호를 동기화하고 활용하는 SSH 도구가 있습니까? 예를 들어 SSH에 대해 잠금 해제한 것과 동일한 비밀번호로 키 파일을 보관하고 비밀번호를 업데이트할 때마다 파일이 업데이트됩니다. 키를 지원하도록 구축되지 않았기 때문에 키를 사용하여 시스템에 직접 로그인할 수 없습니다.

sshpass편집: 댓글 작성자는 비밀번호가 에 표시될 것이라고 지적했는데 ps이는 좋지 않습니다. 또한 여전히 키를 사용하여 시스템에 로그인되어 있기 때문에 ssh이와 같은 별칭을 직접 지정할 수 없습니다 .sshpass ... ssh

sshpass편집 2: 비밀번호 관리자가 정상임을 확인하고 파일 설명자를 사용하여 서버에 로그인하려고 시도했지만 작동하지 않는 것 같습니다. RSA 토큰을 묻는 메시지가 표시되는 대신 RSA 토큰을 묻는 메시지가 표시됩니다. 아무것도 얻지 못한다면 동일한 코드를 실행하지 않고 이를 받아들이지 않을 것이라고 생각하게 됩니다 sshpass.

답변1

sshpassps에 비밀번호를 표시할 필요는 없습니다. 환경 변수로 읽을 수 있습니다.

SSHPASS=12345 sshpass -e ssh user@host

또는 파일에서:

sshpass -f /path/to/password_file ssh user@host

답변2

내 sshpass에는 -f파일에서 읽는 옵션이 있습니다. 따라서 bash 프로세스 교체를 통해 할 수 있습니다

sshpass -f <(myscript_call_1password) ssh host

답변3

sshpass내 작업 설정과 작동하지 않았고 다른 명령을 사용하여 로그인하고 싶지 않았기 때문에 결국 다른 경로로 이동했습니다. expectSSH 구성 매개변수와 Node 스크립트의 조합을 사용하여 LocalCommand비밀번호를 얻었습니다. 바라보다LocalCommand에서 SSH를 종료할 수 있습니까?게다가.

본질적으로 내 솔루션은 다음과 같습니다.

  1. Host work내 컴퓨터를 가리키는 SSH 호스트를 설정합니다 HostName.HostName localhost

  2. 구성 에 PermitLocalCommand yes및 추가LocalComamnd <path to my expect script>; kill $PPIDHost

  3. 예상 스크립트를 사용하여 다음을 수행합니다.

    1. 내 Node 스크립트를 실행하면 내 비밀번호를 가져와 변수에 저장합니다.

    2. 예상 기간 동안 저장된 비밀번호를 사용한 후 상호 작용하세요(아래 참조)

  4. SSH 세션이 완료되면 LocalCommand실행되어 kill $PPID원래 터미널 세션으로 돌아갑니다.

내 샘플 expect스크립트는 다음과 같습니다.

set password [exec node <script>]
spawn -noecho ssh <work_host>
expect "Password"
send "${password}\n"
interact

답변4

자동화 및 키 입력 제거에 대한 원래 질문에 대답하려면 다음을 수행하십시오.

그렇긴 한데, sshpass실행 sshpass하기 전에 명령을 입력해야 해서 ssh좀 불편하네요.

귀하의 의견을 토대로:

1password 데이터베이스와 통신하는 스크립트가 있으므로 이 스크립트를 SSH와 통합하고 싶습니다.

별칭을 정의합니다(예: bash에서):

alias ssh='sshpass -p$(<your_script>) ssh'

일반 ssh통화로 사용하세요.

관련 정보