SSH - 별도의 SFTP 세션을 열지 않고 파일을 전송하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/440524

문제

실제로 프로그래밍 질문은 아니지만 많은 프로그래머와 관련이 있습니다.

다른 컴퓨터에 SSH 세션을 열었다고 가정해 보겠습니다.

원격:html avalys$ ls
Welcome.msg index.html readme.txt
원격:html 분석$

현재 디렉터리의 파일 중 하나를 즉시 전송하는 원격 셸에 입력할 수 있는 명령이 있습니까(예:Welcome.msg)를 내 로컬 컴퓨터로 복사합니다.

원격:html avalys$ stransfer 환영합니다.msg
/home/avalys/html/welcome.msg를welcome.msg로 가져오는 중
/home/avalys/html/welcome.msg 100% 23KB 23.3KB/s 00:00
원격:html 분석$

내가 아는 유일한 방법은 병렬 SFTP 세션과 CD를 SSH 세션의 현재 디렉터리에 여는 것입니다. 이는 서버를 원격으로 관리할 때 실제 PITA입니다.

편집하다:역방향 SFTP/SCP 연결을 사용할 가능성이 있다는 것을 알고 있지만 그러려면 더 많은 입력이 필요합니다.일부 명령의 이름만 입력할 수 있다면 좋을 것입니다(예:"stransfer") 및 전송하려는 파일을 선택하고 그냥 작동하도록 하세요.

도움이 되었습니까?

해결책

당신은 다음과 같은 역전 된 전송 연결을 설정할 수 있습니다. ssh -Rport:127.0.0.1:22 user@host for scp back.

Use scp user@host:port 액세스하기 위해.

다른 팁

이것을 연구 할 때 나는 OpenSSH 클라이언트 ZSSH를위한 드롭 인 교체로 작동하는 프로그램을 발견했습니다.

sudo apt-get install zssh
zssh user@remote
sudo apt-get install zssh
sz file.name
<ctrl>+<space>
rz

매력처럼 작동합니다.

이 문제에 대해 제가 선호하는 해결책은 다음과 같습니다. 중복 질문 내가 물었다].SSH 세션 생성 시 역방향 SSH 터널을 설정합니다.이는 두 가지 bash 기능으로 쉽게 수행됩니다.Grabfrom()은 로컬 호스트에 정의되어야 하고, Grab()은 원격 호스트에 정의되어야 합니다.사용하는 다른 SSH 변수를 추가할 수 있습니다(예:-X 또는 -Y) 적합하다고 생각되는 대로.

function grabfrom() { ssh -R 2202:127.0.0.1:22 ${@}; };
function grab() { scp -P 2202 $@ localuser@127.0.0.1:~; };

용법:

localhost% grabfrom remoteuser@remotehost
password: <remote password goes here>
remotehost% grab somefile1 somefile2 *.txt
password: <local password goes here>

긍정적인 점:

  • OpenSSH 이외의 호스트에서 특별한 소프트웨어 없이 작동합니다.
  • 로컬 호스트가 NAT 라우터 뒤에 있을 때 작동합니다.
  • 두 개의 한 줄 bash 함수 쌍으로 구현될 수 있습니다.

단점:

  • 다음과 같이 고정 포트 번호를 사용합니다.
    • 원격 호스트에 대한 다중 연결에서는 작동하지 않습니다
    • 원격 호스트에서 해당 포트를 사용하는 프로세스와 충돌할 수 있습니다.
  • localhost가 SSH 연결을 수락해야 합니다.
  • 세션을 시작할 때 특별한 명령이 필요합니다
  • localhost에 대한 인증을 암시적으로 처리하지 않습니다.
  • localhost에서 대상 디렉터리를 지정할 수 없습니다.
  • 여러 로컬 호스트에서 동일한 원격 호스트로 이동하는 경우 ssh는 키 변경을 좋아하지 않습니다.

향후 작업:이것은 여전히 ​​꽤 복잡합니다.분명히 SSH 키를 적절하게 설정하여 인증 문제를 처리하는 것이 가능할 것이며, Grab()에 매개변수를 추가하여 원격 디렉터리 지정을 허용하는 것이 훨씬 더 쉽습니다.

더 어려운 것은 다른 부정적인 점을 해결하는 것입니다.동적 포트를 선택하는 것이 좋겠지만 내가 아는 한 해당 포트를 원격 호스트의 쉘에 전달하는 우아한 방법은 없습니다.내가 아는 한 OpenSSH는 원격 호스트에 임의의 환경 변수를 설정하는 것을 허용하지 않으며 bash는 명령줄 인수에서 환경 변수를 가져올 수 없습니다.동적 포트를 선택할 수 있더라도 먼저 연결하지 않고는 해당 포트가 원격 호스트에서 사용되지 않도록 할 방법이 없습니다.

SSHFS와 SSH 연결을 장착 할 수 있습니다. 이렇게하면 동일한 SSH 연결 내에서 파일을 전송할 수 있으며 가장 좋아하는 SSH 클라이언트를 사용하면됩니다. 원하는 경우 자동으로 설정할 수도 있습니다.

당신이 물건을 패치하고 있다면 (IMHO가 패치해서는 안된다), SSH-XFER

Filename 인수를 취하는 Stransfer라는 Bash 스크립트를 작성하면 서버의 파일이 변경되지 않는다고 가정 할 때 SCP 명령에 파일 이름을 삽입 할 수 있습니다.

또는 파일이 항상 동일하다면 ~/.bashrc 파일에 별명을 만들 수 있습니다.

alias getwelcome = 'scp avalys@remotehost : /home/avalys/html/welcome.msg.'

나는 Paul Tomblin이 그 질문에 대해 썼다는 생각과 같은 생각을 가졌다. X-, y- 및 Z- 모뎀 프로토콜 및 도구를 사용하는 데 사용되는 오래된 터미널 세션 (sz 그리고 rz z-modem 변형)는 이와 같은 것을 달성합니다. 이것들이 SSH 세션에서 작동하는지 확실하지 않지만 시도해 볼 가치가 있습니다.

Fink 용품 a lrzsz Mac OS X 에서이 도구가 포함 된 패키지.

바울이 먼저 도착한 후 담당자를 얻는 것이 기분이 좋지 않기 때문에 커뮤니티 위키를 만들었습니다 ...

학교에서 한 Linux 시스템에서 다른 Linux 시스템으로 파일을 전송하는 경우 일반적으로 SSH를 사용하여 원격으로 이동 한 다음 SCP를 사용하여 원격 시스템에서 컴퓨터로 파일을 전송합니다. 그것이 당신이 찾고있는 것인지 아니면 그것이 당신의 경우에도 적용되는지 확실하지 않지만 그것은 일반적으로 다른 터미널 창을 열어야하는 나의 방법입니다.

SCP에 익숙하지 않은지 명확히하기 위해서는 여전히 컴퓨터에 파일을 넣고 싶은 위치를 지정해야하지만 어쨌든 나에게는 일반적으로 원격 파일의 파일 위치보다 기억하기가 더 쉽습니다. 컴퓨터. 다음은 도움이 될 수있는 링크입니다. http://www.computerhope.com/unix/scp.htm

https://superuser.com/questions/259481/reverse-scp-over-ssh-connection

sftp server
get file.txt

분명히 SFTP 콘솔에서 N을 탐색 할 수도 있고 get 완전한 파일 패스를 취합니다. 실행 한 디렉토리에 사본을 복사합니다 sftp.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top