it-swarm-ko.tech

직렬 콘솔 만 있으면 호스트에 파일을 얻는 방법은 무엇입니까?

직렬 콘솔 (터미널 서버를 통한 텔넷을 통한) 만 있으면 호스트 안팎으로 파일을 전송하는 데 어떤 방법을 사용할 수 있습니까?

잘라 내기/붙여 넣기는 작은/인쇄 가능한 물건에 대해 작동하며 uuencode/uudecode (gzip 포함)의 조합으로 인쇄 할 수없는 핸들을 처리했지만 모두 매우 제한적입니다.

22

연결의 다른 쪽 끝에서 사용할 직렬 콘솔 프로그램 ¹은 파일을 원격으로 보낼 수있는 방법이 있습니다. 정확히 어떻게 진행하는지는 원격 시스템에서 사용 가능한 리소스에 따라 다릅니다.

나는 원격 측에 lrzsz 또는 Kermit

가장 쉬운 경우는 lrzsz 또는 Kermit 과 같이 원격에 견고한 바이너리 파일 전송 프로그램이 설치된 경우입니다. 이것은 오늘날보다 한 번 더 흔했지만 특정 시스템에는 여전히이 중 하나가있을 수 있습니다.

로컬에서 사용하는 직렬 콘솔 프로그램에는 Zmodem 또는 Kermit 업로드를 수행 할 수있는 방법이 거의 있으므로 필요한 모든 것을 직접 보낼 수 있습니다.

Zmodem의 경우 원격 시스템에서 rz를 입력하면 로컬 직렬 터미널이 이해해야하는 특수 문자열이 전송되어 파일 선택기 대화 상자가 나타납니다.

커밋은 더 간단한 프로토콜이므로이 경우 수동으로 전송을 시작해야합니다.

바이너리 파일 전송 프로그램은 없지만 uuencode/base64

lrzsz 또는 Kermit와 같은 적절한 이진 파일 전송 프로그램을 사용하면 효율성, 체크섬, 자동 재시도, 전송 재개 중단, 다중 파일 전송 등 여러 가지 이점이 있지만 다음과 같은 이점이 있습니다. 럭셔리 . 하나의 파일 만 보내거나 파일을 거의 보내지 않는 경우 ASCII 업로드로 벗어날 수 있습니다.

terminal protocols 이진 데이터 파일에서 발생하는 많은 바이트 값을 해석하기 때문에 동일한 연결을 통해 파일을 직접 보낼 수 없습니다. 그렇게하면, 양쪽 끝에있는 터미널 에뮬레이션 코드는 일부 데이터를 해석하려고 시도하여 데이터를 손상 시키며 confusing 터미널 처리 코드도 가능합니다.

이진 데이터를 로컬의 안전한 ASCII의 하위 집합으로 인코딩 한 다음 원격의 원시 이진 데이터로 다시 변환하면) uuencodebase64 프로그램은 사소한 알고리즘 선택에서만 다릅니다.

로컬 시스템에서 파일을 인코딩합니다 .²

$ uuencode -o sbf.uue some-binary-file.gz some-binary-file.gz

그런 다음 원격 시스템에서이 명령을 입력하고 로컬 직렬 콘솔의 "ASCII 업로드"기능을 사용하여 파일을 전송하십시오.

$ cat | uudecode

파일 업로드가 완료되면 Ctrl-Ccat에서 나가십시오. 이제 원하는대로 원격 시스템에 디코딩 된 파일이 있습니다.

그러나 Many 보낼 파일 및 인쇄 가능 ASCII 트랜스 코딩은 고통입니다!

bootstrap 더 높은 수준의 기술까지 스스로를 따르는 것은 어렵지 않습니다. 원격 시스템에 C 컴파일러가있는 경우, 이전 기술을 사용하여 원격 시스템에 lrzsz 소스 코드 로컬에서 :

$ uuencode -o lrzsz.tgz.uue lrzsz-0.12.20.tar.gz lrzsz-0.12.20.tar.gz

그런 다음 원격 시스템에서 직렬 콘솔 프로그램을 통해이를 입력하십시오.

$ cat | uudecode
^C
$ tar xvf lrzsz-0.12.20.tar.gz
...build lrzsz normally

첫 번째 명령을 시작한 후 lrzsz.tgz.uue 파일을 원격 시스템으로 보냅니다. 파이프 라인은 uuencoded 데이터를 받아서 바이너리 tarball로 디코딩하여 압축을 풀고 빌드 할 수 있습니다.

하지만 원격 시스템에 C 컴파일러가 없습니다

원격 시스템에 컴파일러가없는 경우 로컬 시스템의 cross-compilerz (또는 무엇이든) 프로그램을 사용하여 원격 시스템으로 보낼 수 있습니다. 위의 기술.


각주 :

  1. minicom , picocom , PuTTY , VanDyke CRT ...

  2. 입력 파일 이름을이 버전의 uuencode에 두 번, 입력 데이터의 소스 이름을 지정하고, 원격 시스템이 데이터를 출력으로 디코딩 할 때 파일을 호출해야하는 대상을 다시 선언해야합니다. 파일. 원격 시스템의 출력 파일 이름이 다를 수 있습니다.

    uuencode의 로컬 버전이 다르게 작동 할 수 있습니다.

13
Warren Young

기본적으로 직렬 tty를 통해 전송하려면 사전 인터넷 방법을 사용해야하며 다른 쪽에서 전송을 수신 할 수있는 방법이 있어야합니다. 이 작업을 수행하는 가장 좋은 방법은 ZMODEM을 사용하는 것입니다. 이는 수신 측에 이미 sz와 같은 도구가 필요하다는 것을 의미합니다. 그러나 수신 대상이 네트워크가없는 라우터 인 경우와 같이 항상 가능한 것은 아닙니다.

이 전송을 수행 할 수있는 유일한 방법은 8 비트 이전 클린 스타일의 터미널 안전 ASCII를 사용하여 채널을 직접 통과하는 것입니다. 대부분의 시스템에 설치되기를 희망하는 최신 도구를 사용하겠습니다.

발신자 :

먼저 파일을 인코딩합니다

base64 file.tar.gz > file.tar.gz.b64

이제 com send-file 명령이 ascii-xfr, 이것은 내 연결 명령 줄입니다

picocom -f n -p n -d 8 -b 115200  --send-cmd "ascii-xfr -snv" /dev/ttyS0

일반적으로 우리는 ascii-xfr받는쪽에 있지만 가지고 있지 않기 때문에 -n는 올바른 줄 끝을 유지하여이 문제를 해결합니다.

수신자 :

연결되었으므로 수신 된 파일을 원하는 디렉토리로 이동하십시오.

cd /tmp/
cat > file.tar.gz.b64

Picocom에서는 CTRL + a + s 하고 보내는 파일의 전체 경로를 입력하십시오. 전송이 완료되면 CTRL + c cat을 (를) 중단해야합니다.

이제 파일을 해독합니다.

base64 -d file.tar.gz.b64 > file.tar.gz

ASCII 전송에 체크섬 보호 기능이 없으므로 수신 상자에 sha512sum, 그러나 모든 체크섬 명령으로 충분합니다. 합계가 일치하는지 수동으로 확인하면 전송이 완료된 것으로 가정 할 수 있습니다!

5
J. M. Becker

아마도 minicom 시도해보십시오.

5
elmarco

직렬 콘솔 만 있으면 작동하는지 알 수 없지만 네트워크 액세스 권한이 있으면 nc(1)을 사용하여 TCP/IP를 사용하여 파일을 복사 할 수 있습니다.

# WARNING: Depending on your setup, this could make your system unbootable
[email protected] # nc -l 8675 | dd of=/dev/sdXXX
[email protected] # dd if=/dev/sdYYY | nc destination-box.local 8675

위의 예에서는 소스 상자에서 대상 상자의 sdbYYYsdaXXX을 복제했습니다. TCP 포트 번호에 대한 8675의 선택은 임의적입니다. 접속할 수있는 모든 포트를 사용할 수 있습니다. 그리고 장치 일 필요는 없습니다; 파일이 될 수 있습니다.

[email protected] $ nc -l 12345 >> ~/.ssh/authorized_keys
[email protected] $ cat ~/.ssh/id_rsa.pub | nc destination-box.local 12345

두 번째 예에서는 rsa 공개 키 (~/.ssh/id_rsa.pub) 대상 호스트의 인증 된 키 파일에 추가했습니다.

5
Kevin M

파일 전송 프로그램의 조부모 인 Kermit 를 사용합니다. 우리는 이미 리눅스가 있기 오래 전에 그것을 사용했습니다.

2
txwikinger