SSH 출력을 다른 명령으로 파이프할 때 키보드 대화형 인증을 사용합니다.

SSH 출력을 다른 명령으로 파이프할 때 키보드 대화형 인증을 사용합니다.

ssh의 출력을 다른 명령으로 파이프하고 싶습니다. 예를 들어:

ssh myserver cat remote-file | diff local-file -

문제는 myserver가 비밀번호를 요청하는데 비밀번호를 입력할 수 없다는 것입니다. (어떤 이유로 서버에서는 공개 키 인증을 사용할 수 없습니다. 이 설정을 변경할 수 없습니다.) "Password:" 프롬프트가 표시되지만 입력한 키가 다시 에코되어 ssh로 전달되지 않습니다. ssh가 비밀번호를 얻도록 하는 방법은 무엇입니까?

저는 하고 싶지 않으니 참고해주세요비밀번호를 SSH로 파이프. SSH 출력을 파이프하고 평소대로 비밀번호를 입력하려고 합니다.

만일을 대비해 저는 OS X 10.7(Lion)에서 bash와 표준 터미널을 사용하고 있습니다. 이 문제를 일으킬 수 있는 별칭을 설정하지 않았습니다. 다른(Linux) 시스템에서 동일한 문제를 본 적이 있으므로 내 설정에만 국한된 문제는 아니라고 생각합니다.

답변1

글쎄, 이것은 내 bash 구성과의 이상한 상호 작용 때문인 것으로 나타났습니다.

.bash_profile현재 실행된 명령을 창 제목이나 screen탭 에 넣는 것이 있습니다 . 작동 방식은 다음을 사용하는 것입니다 trap.

trap 'bash_current_command' DEBUG

그것 앞에:

function bash_current_command {
    # only works in bash > 3.1
    #set -- $BASH_COMMAND

    # for old bash
    set -- $(history 1)
    shift

    if [[ "$1" == "sudo" ]]; then
        cmd="*$(basename -- "$2")*"
    else
        cmd="$(basename -- "$1")"
    fi

    bash_set_title "$cmd"
}

bash_set_titleANSI 이스케이프 코드를 사용하여 현재 터미널 제목과 아이콘 제목을 설정하는 작은 기능입니다. 보시다시피 이것은 하위 쉘을 생성 $(...)하고 내 직감은 이것이 문제일 수 있다고 말합니다. 사실, 이 줄을 변경한 후에는 효과가 있었습니다!

왜 이런 일이 발생하는지 아는 사람이 있다면 자세한 내용을 듣고 싶습니다. 서브쉘은 일반적으로 입력을 훔치 나요 tty? 아니면 디버깅 트랩의 문제일까요? stdin일반 입력/파이프라인 명령의 문제가 기억나지 않습니다 .

(보시다시피, 내 기능에는 어쨌든 몇 가지 문제가 있습니다. 해결 방법으로 하위 쉘 중 하나를 사용하므로 고대 bash 버전에서 작동합니다. (레거시 시스템에서는 붙어 있지만 여전히 통합 구성을 원합니다.) 또 다른 서브쉘을 사용하면 실제 명령어를 추출하는데 사용되는데 sudo, 이런 스위치로 sudo를 호출하면 실패하기 sudo -H -u user command때문에 이번 코드를 수정할 수 있는 기회로 봅니다...)

답변2

이 답변은 귀하의 특정 문제를 설명하지는 않지만 귀하의 삶을 더욱 편리하게 만들 수 있는 몇 가지 가능한 솔루션을 제공합니다.

원격 명령을 실행하지 않고 SSH를 사용하여 원격 파일에 액세스하는 경우 다음을 수행하여 원격 파일 시스템을 마운트할 수 있습니다.sshfs. 당신은 설치해야합니다OS X용 퓨즈그리고SSHFS첫 번째. (OSX용 바이너리 배포판이 있는지는 모르겠습니다.) 그런 다음 다음을 실행하세요.

mkdir ~/myserver
sshfs myserver:/ ~/myserver

인증은 명령을 실행할 때만 필요합니다 sshfs. 그 후에는 원격 파일을 사용할 수 ~/myserver있으므로 diff ~/myserver/path/to/remote-file local-file파일 중 하나가 원격인지 걱정할 필요가 없습니다. fusermount -u ~/myserver파일 시스템을 마운트 해제하려면 실행하세요 .

한 번 인증한 후 여러 SSH 명령을 실행할 수 있는 또 다른 방법은 마스터 연결을 설정하는 것입니다. 바라보다SSH 세션을 재사용하여 rsync 명령 실행

관련 정보