는 최고 방법을 가지고 파일에서 원격 호스트를 로컬 호스트 이상 SSH 세션?
-
09-06-2019 - |
문제
에 연결할 때 원격 호스트를 통해 ssh,나는 빈번하게하고자하는 파일 시스템에 로컬 시스템에 대한 확인 또는 처리합니다.하는 방법이 있 파일을 복사하고 이상이 없는(a)새로운 터미널을 일시 정지/ssh 세션(b)인증하려면 다시 로컬 또는 원격 호스트는(c)경우에도 한쪽 또는 양쪽의 호스트 뒤에 NAT 모니터링 가능합니다.
의 목표는 이용으로 많이 현재의 상태로 가능:이 있는 연결이 사이의 두 컴퓨터는 나는 인증된 모두에서,나의 작업 디렉터리에서 파일---그래서 나를 열어야 하지 않는 또 다른 터미널 및 복사 및 붙여 원격 호스트와 경로에서는 내가 무엇을 now.최고의 솔루션도 없을 필요한 모든 설정하기 전에 세션을 시작했지만,경우에는 설치 한 시간 또는 수 있는 자동화된 보다 완벽하게 허용됩니다.
해결책 7
여기에 내가 선호하는 솔루션은 이 문제를 해결합니다.설 역 ssh 터널을 생성하면 ssh 세션이 있습니다.이것은 쉽게 이루어진에 의해 두 개의 강타 기능:grabfrom()정의할 필요는 로컬 호스트하는 동안 잡아()해야에 정의된 원격 호스트.추가할 수 있습니다 다른 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 라우터
- 그것을 구현할 수 있으로는 한 쌍의 두 개의 중 하나-라인을 강타 기능
네거티브:
- 그것을 사용하여 고정된 포트 번호:
- 와 함께 작동하지 않을 것이 여러 연결을 원격 호스트
- 와 충돌할 수 있습니다 프로세스를 사용하는 포트에서 원격 호스트
- 그것은 필요 localhost 를 받아들이 ssh 연결
- 그것은 필요한 특별한 명령어에서 시작션
- 지 않는 암시적으로 처리에 대한 인증 localhost
- 그것은 허용되지 않 중 하나를 지정 대상 디렉토리에 localhost
- 는 경우를 잡아서 여러 localhosts 동일한 원격 호스트,ssh 지 않을 것 같은 열쇠 변화
미래의 작동:이것은 여전히 매우 불편한 점 등에 대한 의견을 보내 주세.분명히 그것은 것을 처리 할증 문제를 설정하여 ssh keys 적절하게도 쉽도록 명세서의 원격 디렉토리를 추가하여 매개변수를 잡아()
더 많은 어려운 해결하는 기타 네거티브.그것은 좋은 것을 선택하는 동적 포트가지만 말할 수는 없 우아한 방법으로 전달하는 포트 쉘에서 원격 호스트최고로 내가 말할 수있는,예를 들어,윈도우지 않을 설정할 수 있는 임의의 환경변수를 원격 호스트와 bash 걸릴 수 없습니다 환경변수 에서 명령 라인에 인수입니다.는 경우에도 당신이 선택할 수 있는 동적 포트,방법은 없을 위해 그것에서 사용되지 않습니다 원격 호스트 연결하지 않고 처음이다.
다른 팁
zssh (a ZMODEM 래퍼를 통해 openssh)는 정확히 무엇을 원합니다.
그런 다음,전송하는 파일 zyxel.png
에서 원하는 로컬 호스트:
antti@local:~$ zssh remote
Press ^@ (C-Space) to enter file transfer mode, then ? for help
...
antti@remote:~$ sz zyxel.png
**B00000000000000
^@
zssh > rz
Receiving: zyxel.png
Bytes received: 104036/ 104036 BPS:16059729
Transfer complete
antti@remote:~$
업로드가 마찬가지로는 것을 제외하고,당신은 단지 전환 rz(1) 고 sz(1).
퍼티는 사용자가 시도 할 수 있습니다 Le 퍼티, 는 비슷한 기능을 수행할 수 있습니다.
에서 리눅스를 사용 ssh-agent 와 sshfs.를 설정해야 합 sshd 연결을 받아들이는 키와 쌍이다.다음 사용하 ssh-추가 당신에게 중요하 ssh-agent 그래서 당신이 있지 않는 암호를 입력합니다.을 사용하십시오-초 t,그래서 키되지 않은 숙박로드됩니다.
ssh-추가-t3600/home/user/.ssh/ssh_dsa
후에,
sshfs 호스트 이름://PathToMountTo/
가 탑재 서버의 파일 시스템에서의 기계 그래서 당신은에 액세스 할 수 있습니다.
개인적으로,제가 쓴 작은 강타하는 스크립트를 추가고 산을 내가 사용하는 서버의 가장 그래서 때,나는 작업을 시작하는 시기가 실행하는 스크립트를 입력합니다.
를 사용하여 몇 가지 작은 알려진 그리고 거의 사용되는 기능의 openssh 구현을 달성할 수 있는 정확하게 당신이 원하는 무엇!
- 을 활용의 현재 상태
- 사용 작업 디렉터리 당신은 당신
- 이 필요하지 않습 터널 설치하기 전에 세션을 시작
- 가 필요하지 않습 열기는 별도의 공항 터미나의 연결
- 로 사용할 수 있는 한 시간 거래서화 또는 일부로 사용할 수 있는 자동화 세션
당신은 단지 유형이 무엇이에서 각각의 local>
, remote>
, 고
ssh>
프롬프트에서 예 아래입니다.
local> ssh username@remote
remote> ~C
ssh> -L6666:localhost:6666
remote> nc -l 6666 < /etc/passwd
remote> ~^Z
[suspend ssh]
[1]+ Stopped ssh username@remote
local> (sleep 1; nc localhost 6666 > /tmp/file) & fg
[2] 17357
ssh username@remote
remote> exit
[2]- Done ( sleep 1; nc localhost 6666 > /tmp/file )
local> cat /tmp/file
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
또,더 자주 당신이 가고 싶은 다른 방향으로는 경우,예를 들어,
과 같은 작업을 수행 할 전송 ~/.ssh/id_rsa.pub
에서 파일
귀하의 로컬 컴퓨터 ~/.ssh/authorized_keys
파일의 원
기계입니다.
local> ssh username@remote
remote> ~C
ssh> -R5555:localhost:5555
remote> ~^Z
[suspend ssh]
[1]+ Stopped ssh username@remote
local> nc -l 5555 < ~/.ssh/id_rsa.pub &
[2] 26607
local> fg
ssh username@remote
remote> nc localhost 5555 >> ~/.ssh/authorized_keys
remote> cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2ZQQQQBIwAAAQEAsgaVp8mnWVvpGKhfgwHTuOObyfYSe8iFvksH6BGWfMgy8poM2+5sTL6FHI7k0MXmfd7p4rzOL2R4q9yjG+Hl2PShjkjAVb32Ss5ZZ3BxHpk30+0HackAHVqPEJERvZvqC3W2s4aKU7ae4WaG1OqZHI1dGiJPJ1IgFF5bWbQl8CP9kZNAHg0NJZUCnJ73udZRYEWm5MEdTIz0+Q5tClzxvXtV4lZBo36Jo4vijKVEJ06MZu+e2WnCOqsfdayY7laiT0t/UsulLNJ1wT+Euejl+3Vft7N1/nWptJn3c4y83c4oHIrsLDTIiVvPjAj5JTkyH1EA2pIOxsKOjmg2Maz7Pw== username@local
약간의 설명을 위해서입니다.
첫 번째 단계는 LocalForward
;지 않는 경우에는 이미
하나 설립할 수 있습니다 다음 사용 ~C
탈출 캐릭터를 열고
ssh 명령 라인에는 다음과 같은 명령:
remote> ~C
ssh> help
Commands:
-L[bind_address:]port:host:hostport Request local forward
-R[bind_address:]port:host:hostport Request remote forward
-D[bind_address:]port Request dynamic forward
-KR[bind_address:]port Cancel remote forward
이 예에서 나는 설정 LocalForward
에 포트 6666localhost
모두를 위해 클라이언트와 서버포트 번호가 될 수 있습
임의의 열린 포트.
이 nc
명령에 netcat
패키지그것은 설명
"TCP/IP 스위스 군용 나이프";그것은 간단하면서도 매우 유연하고
프로그램에 유용합니다.그것의 표준 부분의 유닉스 toolbelt.
이 시점에서 nc
는 포트 6666 과를 기다리는 또 다른
프로그램을 연결하는 포트에 보낼 수 있도록 하는 내용의
/etc/passwd
.
다음으로 우리가 이용하는 또 다른 탈출 캐릭터 ~^Z
는 tilde
다음 control-Z
.이것을 일시적으로 중단 ssh 과정
방울은 우리가 다시 우리의 쉘입니다.
하나는 뒤로는 로컬 시스템에서 사용할 수 있는 nc
에 연결하는
전달된 포트 6666.주의 부족 -l
이 경우에는
옵션 nc
포트에서 수신하면 서버는
우리가 원하는 것이 아;대신 우리는 단지 사용 nc
클라이언트로
에 연결 이미 듣기 nc
원격 측.
마술의 나머지 주변 nc
명령이기 때문에 필요한 경우
당신은 리콜 위에 내가 말했다는 ssh
프로세스가 일시적으로
일시 중단,그래서 &
를 넣어 전체 (sleep + nc)
식
배경으로 그리고 sleep
은 당신이 충분한 시간을 ssh
환으로 전경 fg
.
두 번째 예에서 아이디어는 기본적으로 같은 제외하고 우리는 설정
터널에가는 다른 방향으로 사용 -R
대 -L
록
우리가 설정 RemoteForward
.다음에 로컬의 상태를 나타냅니다
당신이 사용하고 싶 -l
인수 nc
.
이스케이프 문자가 기본적으로~하지만 당신은 그것을 변경할 수 있습니다:
-e escape_char
Sets the escape character for sessions with a pty (default: ‘~’). The escape character is only recognized at the beginning of a line. The escape character followed by a dot
(‘.’) closes the connection; followed by control-Z suspends the connection; and followed by itself sends the escape character once. Setting the character to “none” disables any
escapes and makes the session fully transparent.
에 대한 자세한 설명 명령을 사용할 수 있 escape 문자를 사용할 수 있에 ssh ncursesw 에는 와이드
ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number of functions through the use of an escape character.
A single tilde character can be sent as ~~ or by following the tilde by a character other than those described below. The escape character must always follow a newline to be interpreted
as special. The escape character can be changed in configuration files using the EscapeChar configuration directive or on the command line by the -e option.
The supported escapes (assuming the default ‘~’) are:
~. Disconnect.
~^Z Background ssh.
~# List forwarded connections.
~& Background ssh at logout when waiting for forwarded connection / X11 sessions to terminate.
~? Display a list of escape characters.
~B Send a BREAK to the remote system (only useful for SSH protocol version 2 and if the peer supports it).
~C Open command line. Currently this allows the addition of port forwardings using the -L, -R and -D options (see above). It also allows the cancellation of existing remote port-
forwardings using -KR[bind_address:]port. !command allows the user to execute a local command if the PermitLocalCommand option is enabled in ssh_config(5). Basic help is avail‐
able, using the -h option.
~R Request rekeying of the connection (only useful for SSH protocol version 2 and if the peer supports it).
사용 ControlMaster(-M 스위치)이 최상의 솔루션,방법이 간단하고 쉽게의 나머지 부분보다는 답니다 여기에.그것을 공유할 수 있는 단일 연결이 세션이 있습니다.같은 소리가 무슨 포스터를 원한다.당신은 여전히 유형 scp 또는 sftp 명령 라인을 하지만입니다.그것을 시도하십시오.내가 사용하는 그것의 모든 내 ssh 로 연결하지 못하도록 차단.
이를 위해서는 내가 내 집 라우터 설정을 앞으로의 포트는 22 다른 컴퓨터(방화벽만 받아들이 ssh 연결에서 작동 기계)그리고 내가 또한 계정 설정 DynDNS 제공하는 동적 DNS 는 것이 해결해 나 가 자동으로 IP.
그 때 나는 ssh 으로 내 컴퓨터 제일 먼저를 실행하는 스크립트 시작 ssh-agent(하는 경우 서버는 그렇게 하지 않 자).스크립트를 실행입니다:
#!/bin/bash
ssh-agent sh -c 'ssh-add < /dev/null && bash'
그것은 요청에 대한 내 ssh 키 암호는 입력하지 않아도 그것은 모든 시간입니다.당신이 필요하지 않는 경 ssh 키를 사용하여 암호가 없으.
의 나머지 부분에 대한 세션에 파일을 전송하시기는 간단으로
scp file_to_send.txt your.domain.name:~/
기 해킹이라는 ssh-xfer 는 주소가 정확한 문제이지만,필요한 패치 OpenSSH 는 리 고 리 모두를 부 또 담당까지로 한다.
당신이 사용할 수 있습 SCP 프로토콜 tranfering 습니다.할 수 있는 이 링크를 참조하십시오
할 수 있어야를 설정하는 공공 및 개인키지 않도록 인증이 필요합니다.
는 방법 당신이 그것에 따라 달라집 보안 요구사항 등을(있다는 것을 알고 있 linux/unix ssh 웜 보이는 것입니다에서 키를 찾는 다른 호스트 그들은 공격할 수 있다).
내가 이렇게 모든 시간에서 모두 뒤에 당신과 역사 거품 라우터입니다.나는 생각을 변경해야 할 수 있습의 몇 가지 설정을 하지만 그것은 큰 문제가되지 않습니다.
"장소 ssh 클라이언트로'주인'모드 연결을 위해 공유합니다.여러-M 옵션이 장소 ssh 로`master"모드로 확인하기 전에 필요한 슬레이브 연결은 받아들여집니다.의 설명을 참조하십시오 ControlMaster 에 ssh_config(5)세요."
I don't quite see 는 방법에 대한 답변이 있는 영업 이익의 질문이 있을 확장하에서 이 비트,데이비드?