scp는 작동하지 않지만 ssh는 작동합니다


55

scp를 통해 서버로 무언가를 보내려면 :

$ scp file server:
                   _____  _____  _____
$

그런 다음 세 줄이 인쇄되고 파일이 복사되지 않습니다. 그러나 문제없이 ssh를 통해 서버에 연결할 수 있습니다.

$ ssh server

SCP를 작동시키는 방법?


운영 체제, ssh 구성 파일 등과 같은 추가 정보를 제공하십시오.
qroberts

그리고이 세 줄이 인쇄되는 것은 무엇입니까?
jjlin

일반적인 경우 scp file server:( "server"가 유효한 호스트 이름이라고 가정) 실행 하면 파일이 계정 디렉토리에 복사됩니다.
dan_linder

3
"scp -v file server :"를 실행할 때 출력을 제공 할 수 있습니까?
dan_linder

당신은 시도 할 수 있습니다 scp다음, 서버에서 다른 위치에 cp또는 mvssh
제시 W. 콜린스

답변:


68

이러한 행동의 가능한 원인 중 하나는 데 어떤 메시지가 서버의 로그인 프로세스 중에 인쇄 할 수 있습니다. Scp는 클라이언트와 서버간에 완전히 투명한 암호화 된 터널을 제공하기 위해 ssh에 의존합니다.

서버의 모든 로그인 스크립트를 확인하고 다른 사용자를 사용해보십시오. 오류의 원인을 식별하는 또 다른 방법은 명령에서 -v를 사용하여 트랜잭션의 진행 상황을 추적하고 실패한 위치를 확인하는 것입니다. 필요한 경우 최대 -vvv를 사용하여 자세한 정보를 표시 할 수 있습니다. InChargeOfIT의 게시물에 나열된 것처럼 다양한 형식의 scp를 확인하는 것도 도움이 될 수 있습니다.

scp는 후드 아래에서 ssh를 사용하여 터널을 설정 한 다음 맨 끝에 ssh 명령을 사용하여 해당 터널을 통해 파일을 전송하여 파일이 도착할 때 파일을 포착합니다. tar 및 ssh를 사용하여 다음 명령으로 소유권 및 작성 시간을 보존하는 디렉토리 구조를 복사하여 설명합니다.

  tar czf - ./* | ssh jf@otherserver.com tar xzf - -C ~/saved_tree

그것을 보내려면

ssh jf@otherserver.com "tar czf - ~/saved_tree" | tar xzvf - -C ./

그것을 다시 얻을 수 있습니다.


정말 도움이됩니다
maple

.bashrc 내에서 scp를 감지 할 수 있습니까? 쉘이 scp가 아닌 경우 출력을 확인하고 인쇄 만 할 수 있습니까?
Alexandros

사용자는 권한 수준 15 여야합니다. 사용자가 권한 수준 15가 아닌 경우 ASA는 인증 후 권한 문제를 나타내는 오류 메시지없이 연결을 닫습니다. 또한, 사용자가 enable비밀번호를 입력 하고 입력 할 수 있다고해서 비밀번호가 15 인 것은 아닙니다. 어딘가에 "권한 15"가 표시되지 않으면 사용자는 show run | inc USERNAMEscp 할 수 없습니다.
Tyler Abair

기본적으로 원격 서버의 .bashrc에서 "zsh"를 제거하고 scp가 작동하기 시작했습니다!
Geek

당신은 SHELL 변수 (예 : 변경하는 경우에도 중단 export SHELL=/bin/zsh인치) ~/.bashrc. 이것은 때때로 부재 중으로 사용됩니다 chsh.
Suuuehgi

57

대상 사용자의 .bashrc 또는 동등한 파일을 확인하십시오. ~ / .bashrc는 비 대화식 로그인을 위해 제공됩니다. 무엇이든 출력하는 반향 또는 명령이 있으면 SCP 프로토콜이 중단됩니다.


10
유레카! 내가 운이 있었기 때문에 이것은 내 문제였다 | 내 원격 .bashrc의 각 로그인마다 cowsay. 이제 완벽하게 작동합니다.
토마스 브라운

3
당신은 생명의 은인입니다. :)
Gaurav Manchanda

4
여전히을 원한다면 fortune | cowsay.bash_profile에 넣으십시오. 대화식 로그인 전용이며 SCP 세션 중에는 소스를 제공해서는 안됩니다.
spoulson

내 문제는 내 다른 파일을 소싱하는 중이었고 .bashrc다른 컴퓨터에는 존재하지 않았습니다. 이 응답 의 논리를 사용하여 ~/.bashrc비 대화식 (이 경우 scp) 을 건너 뛸 수 있습니다 .
wisbucky

15

편집 : scp 명령에 유효한 경로를 입력하고 있습니까? 예를 들면 다음과 같습니다.

scp test.txt username@remoteserver.com

실패합니다 (사실보고있는 것처럼 명령을 인쇄합니다). 이 경우 원격 서버에 대한 유효한 경로를 제공해야합니다. 예를 들어scp test.txt username@remoteserver.com:~/

사용법 예 :

파일을 보내십시오 :

scp /path/to/local/file yourremoteusername@servername.com:/path/to/remote/directory

파일 받기 :

scp yourremoteusername@servername.com:/path/to/remote/file /path/to/local/directory

예 :

내 데스크탑에서 원격 서버의 홈 폴더로 파일을 보냅니다.

scp ~/Desktop/myfile.txt john_doe@10.1.1.10:~/

~홈 디렉토리의 바로 가기임을 기억하십시오 ( 예 : / home /

웹 루트로 파일을 보내십시오 :

scp ~/Documents/working/index.html john_doe@johndoe.com:/var/www/index.html

이 예에서 사용자 john_doe는 원격 / var / www 디렉토리에 대한 쓰기 권한이 필요합니다.


2
당신은 질문에 대답하지 않습니다. OP가 제공 한 명령 줄은 상당히 괜찮아 보입니다. 흥미로운 부분은 ------... 귀하의 예제와 관련이 없습니다.
akira

@ 아키라 어쩌면 아닐 수도 있습니다. 유효한 경로를 제공하지 않으면 scp 명령이 실패합니다. 예를 들어, scp somefile user@host.com:원격 디렉토리에 대한 올바른 권한이 없으면 문제가 발생할 수도 있습니다. 내 대답을 편집하는 것은 조금 더 명확 그것을 만들려면
InChargeOfIT

1
"파일이 존재하지 않음"에 대한 예제는 없으며 "서버 측의 잘못된 권한"에 대한 예제도 없습니다.
akira

4

일부 호스트에서는 .bash_profilescp와 같은 비대화 형 로그인 을 잘못 제공합니다 . 터미널로 인쇄 된 메시지는 scp제대로 작동하지 않을 수 있습니다 . 메시지가 있다면 .bash_profile이것이 원인 일 수 있습니다.

로그인 메시지, 배너 등을 대화 형 로그인에 계속 표시하고 비대화 형 로그인을 scp통해 계속 사용할 수 있으 려면 .bash_profile파일에 인쇄 될 메시지 앞에 다음을 추가 하십시오.

# ********** If not running interactively, don't do anything more! ***********

[ -z "$PS1" ] && return

대체 코드는 다음과 같습니다.

[[ $- == *i* ]] || return

그리고 다른 대체 코드 :

case $- in
    *i*) ;;
      *) return;;
esac

내가 생각하는 첫 번째 대체 코드의 더 긴 버전입니다. 일부 호스트에서 첫 번째 코드는 올바르게 작동하지 않지만 두 번째 코드는 올바르게 작동합니다.

비 대화식 scp 로그인 동안 .bash_profile의 추가 실행을 중단하고 scp가 작동하도록 허용하지만 ssh를 통해 로그인하면 로그인 메시지가 표시됩니다.

참고 :.bashrc파일은 .bash_profile($ PATH) 에서 소스 로 사용하는 경우 파일 에서 사용할 수 있으므로 비 대화식 로그인 중에 일부만 소스로 제공됩니다.


고마워 매력처럼 작동합니다 ........
뭔가

0

이것은 질문에 직접 대답하지는 않지만 2 명의 원격 호스트간에 파일을 전송할 때 동결 scp가있는 솔루션을 찾고 나와 같은 사람들에게 도움이 될 수 있습니다.

scpssh의 메시지로 인해 중단 되면 메시지를 표시하는 데 도움이 될 수 있습니다.

scp -o "StrictHostKeyChecking no"

그리고 / 또는

scp -B

scp 사람으로부터 :

-B 배치 모드를 선택합니다 (비밀번호 또는 암호 구를 요구하지 않습니다).

-o ssh_option 별도의 scp 명령 행 플래그가없는 형식으로 ssh에 옵션을 전달하는 데 사용할 수 있습니다. 아래에 나열된 옵션 및 가능한 값에 대한 자세한 내용은 ssh_config (5)를 참조하십시오.

내 경우에는 도움이되는 것처럼 보였지만 전체 문제를 해결하지는 못했습니다. 원격에서 원격으로 전송할 때 scp가 정지되는 이유를 찾을 수 없습니다. 파일 중간에 매달 렸습니다. 9 번 시도했지만 10 번 시도는 실패했습니다. VPN 연결이 잠시 동안 트래픽 스파이크를 받고 scp가 복구되지 않으면 중단 될 수 있다고 생각했습니다. 그것은 실제로 영원히 멈추고 오류 메시지조차 제공하지 않습니다.

그러나 나는 포기하고 sftp로 전환했다. 원격 호스트간에 직접 연결을 사용하기 때문에 상당히 빠릅니다. 당신은 활성화해야합니다

Host example.com
    AgentForward yes

스크립트를 실행하는 머신의 ~ / .shh / config 파일에 있습니다. 물론 이것은 원격 시스템이 모두 신뢰할 수있는 네트워크 내에있는 경우에만 해결 방법입니다.


0

나는 전화 exec /bin/bash했다 .cshrc.

이것을 제거하면 문제가 해결되었습니다.

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