배경:
putty
Windows에서 SSH 클라이언트 및 파일 전송 응용 프로그램 으로 사용했습니다 WinScp
. 그런데 현재 회사에 입사한 후 동료들이 클라우드 서버에 파일을 업로드하고 다운로드하려면 및 명령을 client <--> server
사용하라고 했습니다 . 이후 ssh 클라이언트를 사용하며 에서 사용할 수 있습니다 .rz
sz
Xshell
rz
sz
Xshell
putty
명령줄 scp
이나 Winscp
클라이언트를 사용하지 않는 이유는 무엇입니까? 회사 네트워크 내 소수의 컴퓨터만 클라우드 서버에 직접 ssh
연결할 수 있기 때문입니다. scp
그래서 집에 있을 때 다음 ssh
이라는 디렉터리로 이동합니다.점프 서버그런 다음 연결하려는 클라우드 서버를 선택하고 이를 파일 전송 rz
에 사용할 수 있습니다.sz
그래서 내 질문은 다음과 같습니다
내부적으로 는 어떻게 rz
작동 하나요 sz
? 원격 서버에 직접 연결되지 않은 경우 제 경우에는 어떻게 작동합니까 rz
?sz
scp
ssh
(간단한 소개를 주시면 감사하겠습니다. 설명서( man rz
, man rz
)와 Google을 통해 찾을 수 있는 모든 것을 읽었지만 유용한 것을 찾지 못했습니다. 또한소스 코드그러나 아무것도 얻지 못했습니다. )
rz
신뢰할 수 있나요 sz
? 다른 사람이 그것을 사용합니까? 내 요구에 맞는 더 나은 솔루션이 있습니까?
이렇게 오래되고 인기 없는 것을 사용하면 겁이 납니다. 무엇이 잘못될 수 있는지 모르겠습니다. 나는 sha256sum
파일을 업로드하거나 다운로드한 후에 항상 이 작업을 수행하는데, 이는 나를 미치게 만듭니다.
Xshell
다음과 같은 두 명령을 모두 사용하여 몇 가지 옵션을 시도했습니다 .
sz
--ascii
기본적으로 개행 변환이 수행되도록 지정하는 이진 파일이 전송됩니다 .rz
항상 바이너리 파일 보내기를 지정해도--ascii
아무것도 변경되지 않으며 이는 문서와 전혀 일치하지 않습니다. ;(
답변1
rz와 sz는 내부적으로 어떻게 작동합니까?
그들은 기본적으로 터미널 연결을 사용하여 서로 통신하고 특정 프로토콜을 사용하여 해당 연결을 통해 파일을 보냅니다. 여기에는 일부 동기화( sz
프로그램이 시작 시 데이터를 덤프하는 것이 아니기 때문에), 메타데이터 처리(예: 파일 이름), 오류 감지 및 필요한 경우 재전송이 포함됩니다. 또한 가능한 제어 문자가 전송을 방해하는 방식으로 해석되는 것을 방지하기 위해 일부 터미널 설정을 지정한 것 같습니다.
다만, 실제 계약 내용은 잘 모르겠지만, 몇몇 링크가 있습니다Wikipedia의 ZMODEM 페이지당신이 관심이 있다면.
실제로 SSH 연결이 필요하지 않은 작업도 있을 수 있습니다. 예를 들어, TCP/IP 및 이더넷의 경우 하위 수준에 오류 감지 코드가 있고, TCP는 재전송을 처리하며, SSH 수준의 인증된 암호화 제품군은 최소한 전송 오류를 감지해야 합니다(악성인 것처럼 나타나기 때문). 수정된 데이터 패킷으로)).
SSH 연결을 통해 파일을 보낼 수 있습니다
cat somefile.txt | ssh me@somewhere 'cat > somefile.txt'
이것은 단지 SSH 연결을 통해 데이터를 덤프하는 것인데, SSH는 8비트 깨끗하기 때문에 잘 작동하고, 이와 같이 사용하면 원격 측에 터미널을 설정하지 않으므로 터미널 제어는 문제가 되지 않습니다.
물론, 다음과 같이 중간 점프 호스트에서 SSH 클라이언트를 수동으로 실행해야 하는 경우
myworkstation$ ssh me@jumphost
jumphost$ ssh me@destination
그러면 파이프라인을 설정하는 것이 조금 더 어렵습니다. 다음과 같은 작업을 수행해야 합니다.
myworkstation$ cat somefile.txt | ssh me@jumphost 'ssh me@destination "cat > somefile.txt"'
중첩된 명령줄이 SSH에서 작동하는지 잘 모르겠습니다. 그래서 그런 의미에서 ZMODEM을 양쪽 끝에서 사용할 수 있다면 적어도 터미널 세션에서는 사용할 수 있기 때문에 어느 정도 사용 가능한 대안이 될 것 같습니다.
그런 다음 SSH에는 ProxyCommand
점프 호스트 사용을 단순화하고 바로 사용하거나 scp
더 쉽게 사용할 수 있는 기능이 있습니다 sftp
. 예를 들어 참조하십시오.https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
rz와 sz는 신뢰할 수 있습니까? 다른 사람이 그것을 사용합니까? 내 요구에 맞는 더 나은 솔루션이 있습니까?
이렇게 오래되고 인기 없는 것을 사용하면 겁이 납니다. 무엇이 잘못될 수 있는지 모르겠습니다. 저는 항상 파일을 업로드하거나 다운로드한 후에 sha256sum을 수행하는데 정말 짜증이 납니다.
글쎄, 그들은 오랫동안 사용되어 왔으며 파일은 (대부분) 여전히 바이트당 8비트 데이터 덤프이므로 기본적으로 여전히 작동해야 할 이유가 없습니다. 약간 구식이지만 그 자체에는 아무런 문제가 없습니다. 물론 성능은 또 다른 문제이며, 버그를 발견하면 이를 수정할 적극적인 관리자를 찾는 데 어려움을 겪을 준비가 필요할 수도 있습니다.
일반적으로 필수는 아니지만 데이터를 소중히 여기고 확실하게 확인하고 싶다면 데이터 전송을 수동으로 확인하는 것이 나쁜 것인지 잘 모르겠습니다. HTTP를 통해 무언가를 전송하는 경우에도 둘 다처럼 잘린 전송을 얻을 수 있으며, wget http://...
중단 curl -o http://...
되면 파일의 일부를 남겨 두는 것이 좋을 것 같습니다... ( cat | ssh cat
위에서 제시한 내용에도 동일하게 적용됩니다. 참고하세요.)
귀하의 필요에 가장 적합한 것이 무엇인지 스스로 결정해야 합니다.
답변2
먼저, 동일한 단어 upload
와 방법을 사용하는지 확인합시다 .download
모뎀 연결에서 "업로드"는 "로컬 시스템에서 원격 시스템으로 파일 보내기"를 의미하고 "다운로드"는 "원격 시스템에서 나에게 파일을 보내도록 허용"을 의미합니다. "위"와 "아래"가 어디서 왔는지는 잘 모르겠습니다. 아마도 단일 소형 PC(또는 심지어 터미널)가 가장 낮은 수준이고 대형 중앙 컴퓨터가 " 더 높은 단계".
sz
Xshell에는 ZMODEM 프로토콜이 내장되어 있습니다. 실제로는 및 명령을 기본적으로 사용하지 않습니다 rz
.
"업로드 명령" 옵션은 어떤 명령이 업로드되는지 결정합니다.Xshell을 통해 원격 시스템으로 전송됨원격 클라우드 서버측에서 아무런 준비 없이 Xshell의 "ZMODEM을 사용하여 파일 보내기" 기능만 사용한다면. 그래서 Xshell이 보내면 클라우드 서버가 받아야 하므로 업로드 명령은 입니다 rz
.
이를 위해서는 클라우드 서버와의 Xshell 세션이 명령 프롬프트 상태에 있어야 하며, 명령을 받을 준비가 되어 있어야 합니다. 그렇지 않은 경우(예를 들어 top
세션에서 실행하고 ZMODEM을 사용하여 파일을 보내려고 하면) 디스플레이가 왜곡되고 top
약 1분 정도 정지된 다음 원격 측에서 수신을 시작할 수 없다는 메시지가 표시됩니다.
클라우드 서버의 명령 프롬프트에 입력하여 현재 있는 디렉터리 rz
로 파일을 수신할 준비를 클라우드 서버에 지시 할 수도 있습니다. cd
이렇게 하면 rz
Xshell이 인식할 수 있는 특수 문자열이 출력되며 Xshell은 자동으로 "파일 보내기" 대화 상자를 팝업하고 보내려는 파일을 지정한 후 전송을 시작합니다. (ZMODEM 프로토콜의 설계는 보낸 사람이 "업로드 명령" 문자열을 보내고 받는 사람 ZMODEM이 수신할 준비가 되어 있으면 원치 않는 명령이 자동으로 무시되도록 설계되었습니다.)
config-backup.zip
예를 들어 로컬 컴퓨터의 클라우드 서버에 액세스하려는 경우와 같이 다른 방법으로 파일을 전송하려는 경우 sz config-backup.zip
클라우드 서버에 대한 SSH 세션을 입력하기만 하면 됩니다. 클라우드 서버는 sz
(Zmodem 보내기) 명령을 시작하여 또 다른 특수 문자열을 출력합니다. 이 경우 Xshell은 즉시 파일 수신을 시작하고 구성된 다운로드 디렉터리에 파일을 저장하거나 파일을 다운로드한 후(또는 다운로드하는 동안에도) 로컬 시스템에 파일을 배치할 위치를 물어볼 수 있습니다.
적어도 내 Debian 10 시스템에서는 의 매뉴얼 페이지에 및 명령 rz
도 포함되어 있으며 , 의 매뉴얼 페이지에도 및 가 포함되어 있습니다 . 변환은 각 매뉴얼 페이지에서 다르게 지정됩니다.rx
rb
sz
sx
sb
--ascii
rz
매뉴얼 페이지 에서 이 옵션에 대한 설명은 --ascii
다음과 같습니다.
-a, --ascii Convert files to Unix conventions by stripping carriage returns and all characters beginning with the first Control Z (CP/M end of file).
sz
매뉴얼 페이지 의 설명은 다음과 같습니다.
-a, --ascii Convert NL characters in the transmitted file to CR/LF. This is done by the sender for XMODEM and YMODEM, by the receiver for ZMODEM.
따라서 클라우드 서버에서 자신에게 파일을 전송할 때 Xshell이 실제 변환을 처리합니다.
아직 OpenVMS 서버가 일부 있는 회사에서 근무했을 때 OpenVMS 서버 관리자는 가능하면 파일 형식 변환을 별도의 명시적인 단계로 수행하는 것을 선호한다고 말했습니다. 그의 추론은 "이것이 무엇인가가 변환되었는지, 변환이 어떻게 이루어졌는지 확인할 수 있는 유일한 방법이다"였습니다. 문자 인코딩, ISO-8859-1, ISO-8859-15, 마지막으로 UTF-8 및 이들 간의 변환에 대해 나는 그의 의견에 동의하는 경향이 있습니다.
또한 문자 변환 결과를 확인할 때마다 의심스러운 변환 결과의 16진수 덤프를 수행하고 해당 인코딩 테이블과 비교하여 문자를 확인하는 방법을 배웠습니다. 줄 끝의 경우 다음을 사용하여 cat -A
추가로 \r
표시 할 수도 있습니다.file
설명하다시도하는 대신 줄 끝 유형을 사용하십시오전시하다그들을. 때로는 변환이 예상한 대로 정확하게 적용되지 않을 수도 있습니다. 때로는 클라우드 서버의 텍스트 편집기, TTY 드라이버 또는 터미널이 검사하려는 내용을 변경하는 또 다른 변환 계층을 "유용하게" 적용하여 잘못된 결론을 내릴 수도 있습니다.
답변3
먼저, ssh는 별도의 TCP/IP 연결과 연결을 위한 원격 서버 데몬이 필요합니다. 모든 시스템에 이 기능이 있는 것은 아닙니다.
z모뎀 사용기존의연결은 문자를 보내고 받습니다. 즉, 필요한 모든 인프라가이미 설치되어 있음. 상대방이 예상하는 문자를 입력하는 데 너무 느릴 수 있으므로 사용자 측에서도 프로그램이 필요합니다. Xshell에는 이 기능이 내장되어 있어 Zmodel 시작 순서를 직접 인식합니다(또는 클라이언트를 수동으로 시작해야 함).