SSH는 명령이 SSH 명령에 대한 인수로 제공 될 때 입력 된 모든 비밀번호를 볼 수있게합니다.


45

내가 이것을 실행하면 :

ssh user@server 'mysql -u user -p'

MySQL 비밀번호를 묻는 메시지가 표시되고 입력을 시작하면 비밀번호가 화면에 표시됩니다. 이 문제를 어떻게 방지 할 수 있습니까? 로그인 ssh하여 MySQL 명령을 실행하면 모든 것이 잘 작동합니다.


5
제목이 명확하지 않다고 생각하지 마십시오. 암호를 포함한 모든 텍스트를 볼 수 있다고 말할 수 있습니다. 그리고 ssh는 입력하는 내용이 다른 명령이나 데이터와 비교하여 암호가 무엇인지 아는 의미는 무엇입니까?
barlop

@ barlop 나는 제안에 열려 있습니다.
user110971

@barlop은 서버에 ssh하면 명령을 실행할 때 잘 작동합니다. 명령이 인수로 제공 될 때 ssh 동작을 동일하게 만드는 방법을 찾고 있습니다.
user110971

아마도 그럴 필요는 없지만 콘솔에서 전체 복사 / 붙여 넣은 예제를 포함시킬 수 있습니다 (예 : ssh 명령뿐만 아니라 응답 및 후속 mysql 프롬프트 표시). 당신은 내가 그 순간에 그것을 테스트 할 수 없습니다 사이트에 넣어되지 않도록 swisscheese하기 위해 암호를 변경할 수 있습니다
barlop

@barlop 그것은 당신이 기대하는 것과 같은 메시지입니다. 즉 ssh 비밀번호와 MySQL 비밀번호 프롬프트
user110971

답변:


100

실행할 원격 명령을 제공하면 SSH는 tty를 할당하지 않으므로 원격 명령은 에코를 비활성화 할 수 없습니다. 다음 -t옵션을 사용하여 SSH가 tty를 제공하도록 할 수 있습니다 .

ssh -t user@server 'mysql -u user -p'

동등한 옵션 ( -o구성 파일 용 또는 구성 파일 용)은 RequestTTY입니다. 비 대화식 명령에 원치 않는 영향을 줄 수 있으므로 config에서 사용하지 않도록주의 해야합니다 .


15
또는 ~ / .ssh / config를 편집하여 특정 호스트가 항상 TTY를 요청하도록 구성 할 수 있습니다. 보기 RequestTTY에서 man 5 ssh_config.
CVn

7
@ MichaelKjörling (및 Toby) : "-t"를 추가하면 부작용이 있으므로 대화식 사용에만 예약해야한다는 경고를 추가 할 수 있습니다. : 좋은 그 부작용이 일부에서보기를 들어 unix.stackexchange.com/a/122624/27616 (StephaneChazelas에서)
올리비에 Dulac

동의-호스트가 아닌 원격 명령에 따라 설정을 추가 할 수 없다는 것은 부끄러운 일이라고 제안했습니다.
Toby Speight

28

보호 된 옵션 파일에 비밀번호 저장

원격 컴퓨터의 보안을 [*] 신뢰할 수 있는 경우 설명서의 암호 보안 에 대한 최종 사용자 지침 장 에서 제안한대로 각 암호 를 통해 통신 ssh하거나 입력 할 필요없이 적절히 보호 된 옵션 파일에 암호를 저장할 수 있습니다. 시각.

특히 .my.cnf홈 디렉토리 에있는 파일의 [client] 섹션에 행을 추가 할 수 있습니다 .

[client]
password=your_pass

물론 파일 액세스 모드를 400 또는 600으로 설정하여 파일을 자신 이외의 사람이 액세스 할 수 없도록해야합니다.

chmod 600 ~/.my.cnf

그런 다음과 같은 것을 사용할 수 있습니다

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'

user110971계정의 사용자 이름은 어디에 있습니까 ?


ssh가 의사 tty ( ssh -t) 를 할당하도록 강제

이 문제는 명령을 보낼 때마다 발생 ssh하며 기본적 ssh으로 pseudo-tty를 할당하지 않기 때문에 입력을 삽입해야합니다 .

옵션으로 tty 할당을 강제 할 수 있습니다 -t(필요한 경우 둘 이상).

-t

의사 -tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 예를 들어 메뉴 서비스를 구현할 때 매우 유용합니다. ssh에 로컬 tty가없는 경우에도 여러 -t옵션이 tty 할당을 강제합니다.

이 데비안 게시물 (Jul_11_2008)에서 에 대해 읽을 수 있듯이 sudo, 반복되는 것을 좋아하는 오래된 문제입니다.

ssh user@server "sudo ls"  
password: password  

그리고 비밀번호가 표시됩니다

해결책은 ssh가 -t 플래그와 함께 의사 tty를 강제로 할당하도록하는 것입니다.

ssh -t user@server sudo ls

노트 :

[*] 사용자 만 액세스 할 수있는 파일에 비밀번호를 그대로두고 작업중인 클라이언트에서 루트를 사용할 수있는 경우.
OS를 변경하는 원격 컴퓨터를 재부팅하거나 HDD를 제거 할 수 있다면 컴퓨터를 완전히 안전한 것으로 간주 할 수는 없지만 데이터베이스 자체는 안전하지 않습니다.


1
어쩌면 "-t"를 추가하면 부작용이 있으므로 대화식 사용에만 예약해야한다는 경고를 추가 할 수 있습니다. 이러한 부작용 중 일부에 대한 좋은 견해 : unix.stackexchange.com/a/122624/27616(StephaneChazelas 제공 )
Olivier Dulac

3

proc fs에 대한 마운트 옵션 "hidepid"도 중요합니다. 다른 사용자의 프로세스 목록에서 명령 줄을 볼 수 없게 만듭니다. fstab 예 :

proc /proc proc hidepid=1 0 0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.