SSH 세션에서 서버에서 파일을 가져 오는 편리한 방법이 있습니까?


6

나는 종종 작업을 위해 클러스터 노드에 SSH를 만들고 처리 후 분석을 위해 여러 결과를 로컬 컴퓨터로 다시 가져오고 싶습니다. 일반적 으로이 작업을 수행하려면 로컬 셸을 사용하여 서버에서 scp를 사용하지만 많은 경로 조작이 필요합니다. 대화 형 FTP와 같은 구문을 사용하고 서버에서 로컬 pwd로 파일을 '풀'하고 싶습니다.

또 다른 가능한 해결책은 클라이언트 컴퓨터를 ssh 별칭으로 자동 설정하여 다음과 같은 방법을 사용하는 것입니다.

scp results home:~/results

예상대로 작동합니다.

나를 위해 이것을 할 모호한 SSH 트릭이 있습니까?


grawity 의 대답 에서 작업하면 구성 파일의 완벽한 솔루션은 다음과 같습니다.

로컬 .ssh / config :

Host ex
    HostName ssh.example.com
    RemoteForward 10101 localhost:22

ssh.example.com .ssh / config :

Host home
    HostName localhost
    Port 10101

정확히 같은 명령을 수행 할 수 있습니다

scp results home:

파일 결과를 내 가정용 컴퓨터로 전송합니다.

답변:


5

대화 형 FTP와 같은 구문을 사용하고 서버에서 로컬 pwd로 파일을 '풀'하고 싶습니다.

사용하십시오 sftp.

(힌트 :하거나 새 창을 열하지 않을 수없는 경우, 당신은 눌러 SSH 연결을 일시 중단 할 수 있습니다 Enter, ~, CtrlZ, 파일을 전송하고 함께 SSH 재개를 fg.)

또 다른 가능한 해결책은 클라이언트 컴퓨터를 ssh 별칭으로 자동 설정하는 방법을 사용하는 것입니다

몇 가지 방법이 있습니다.

  • 정적 별칭 ssh과는 scp- 당신이 추가 ~/.ssh/config:

    Host home
        # If you don't have a domain name, check out DynDNS...
        # ...or just use your IP address.
        Hostname homepc.somedomain.tld
    
        # If necessary, uncomment:
        #User john
        #Port 1234
    

    사용하다:

    scp foo home:
    

    (이후에 경로를 제공하지 않으면 :파일이 홈 디렉토리로 이동합니다.)

  • SSH_CLIENT환경 변수를 사용하십시오 .

    export client=${SSH_CLIENT%% *}
    if [[ $client == *:* ]]; then
        client="[$client]"
    fi
    

    에 그 넣어 ~/.profile하거나 ~/.bash_profile또는 원하는 목적지 후 사용 $client당신이 당신의 자신의 주소를 필요로 할 때.

    scp foo "$client:"
    
  • 둘 다 섞는다.

    ~/.ssh/config:

    Host client
        ProxyCommand ~/bin/reverse-connect %p
    

    ~/bin/reverse-connect:

    #!/bin/sh
    if [[ $SSH_CLIENT ]]; then
        client=${SSH_CLIENT%% *}
    else
        echo "I don't know your address." >&2
        exit 1
    fi
    if [[ $client == *:* ]]; then
        client="[$client]"
    fi
    
    port=${1:-22}
    
    exec socat - "tcp:$client:$port"
    

    사용하다:

    scp foo client:
    

SSH_CLIENT는 거의 완벽합니다! 그래도 라우터 뒤에 있다면 어떨까요? 랩톱에서 연결하기 때문에 일반적입니다. 나는 일종의 리버스 ssh 터널링 계획을 상상했지만 그 설정 방법을 모르겠습니다.
J. Abrahamson 2019

@tel : 방법 1, 포트 전달 : 포트를 선택하여 컴퓨터의 포트 22 / tcp로 전달하십시오. scp파일을 복사 할 때 같은 포트를 알려주십시오 .
grawity

@tel : 방법 2, SSH를 사용한 "역방향 전달": ssh -R 2345:localhost:22컴퓨터를 원격 서버의 localhost포트 2345로 연결할 수 있습니다.
grawity


0

scp로컬 호스트에서 사용할 수 있습니다 . 와 같은 명령을 사용하십시오 scp server:file ..

다른 옵션은 다음 sftpsshfs같은 이미 지적했다.

이 모든 것에는 승인 된 키를 사용합니다. 키를 암호로 보호하는 것이 더 안전합니다. 필요에 따라 ssh-agent를 사용하여 ssh에 키를 제공합니다. ssh-add 명령은 키 암호를 입력하라는 메시지를 표시하고 키를 ssh-agent에로드합니다.

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