소개
이 문서에서는 -O 옵션을 사용하여 OpenSSH9.0의 클라이언트에서 Cisco IOS® XE 디바이스로 SCP를 성공적으로 수행하는 방법에 대해 설명합니다.
해결 방법
SCP를 SFTP 대신 파일 전송에 사용하도록 강제하려면 -O 옵션을 SCP 명령과 함께 최신 버전의 OpenSSH에서 사용할 수 있습니다.
scp -O file.ext username@192.0.2.1:file.ext
배경 정보
SCP를 사용하여 SCP 클라이언트와 SCP 서버 간에 파일을 전송할 수 있습니다. SCP는 인증에 SSH 세션을 사용합니다. 사용자가 인증되면 다른 채널이 열려 SCP로 파일을 전송합니다. OpenSSH9.0 이상 버전에서는 SSH가 인증에 계속 사용되지만 SFTP는 SCP 대신 파일 전송에 사용됩니다. SFTP는 현재 SSH를 통해 파일을 전송하는 데 지원되지 않으므로 Cisco IOS XE의 현재 버전에 문제가 발생합니다. SSH 세션이 성공하고 syslog 버퍼에 로그인 성공 로그가 있습니다. 그러나 SCP 클라이언트가 SFTP 전송을 시작하려고 하면 연결이 갑자기 닫힙니다.
SSH 및 SCP 구성
SCP 클라이언트를 사용하여 Cisco IOS XE 디바이스로 파일을 전송하기 위한 전제 조건.
- SSH를 구성해야 합니다.
- 로컬 로그인 또는 AAA를 구성해야 합니다.
- 사용자가 SCP를 수행하려면 권한 레벨 15가 필요합니다.
- SCP 서버를 활성화해야 합니다.
다음은 컨피그레이션의 예입니다
# configure SSH
hostname c8000v
ip domain name cisco.com
crypto key generate rsa
# optional - use ssh version 2
ip ssh version 2
# verify the SSH server is online
show ip ssh
# create a user with privilege level 15
username cisco privilege 15 password 0 cisco
# configure the vty line to use local login and allow ssh
line vty 0 4
login local
transport input ssh
# Enable the SCP server
ip scp server enable
팁: SSH 컨피그레이션에 대한 추가 정보는 여기서 확인할 수 있습니다.
참고: aaa는 로컬 로그인 대신 사용할 수 있습니다.
컨피그레이션이 완료되면 디바이스에서 연결 가능한 IP 주소로 디바이스에 SSH/SCP를 수행할 수 있습니다.
Linux 디바이스에서 다음 명령을 디바이스의 IP 주소와 함께 사용할 수 있습니다.
참고: 기본적으로 파일은 bootflash에 복사됩니다.
문제 해결
문제가 발생하면 다음 증상을 확인하십시오.
1. 클라이언트의 OpenSSH 버전에 9.0 이상이 표시됩니다.
jeff@jeff-virtual-machine:~$ ssh -V
OpenSSH_9.0p1 Ubuntu-1ubuntu7, OpenSSL 3.0.5 5 Jul 2022
2. 클라이언트가 오류 또는 파일 전송 없이 연결이 갑자기 닫히는 것을 보여줍니다.
jeff@jeff-virtual-machine:~$ scp test.txt cisco@192.0.2.1:test.txt
(cisco@192.0.2.1) Password:
scp: Connection closed
3. 라우터에서 syslog에 SSH 연결이 성공했지만 파일이 전송되지 않았습니다.
*Mar 26 18:06:57.290: %SEC_LOGIN-5-LOGIN_SUCCESS: Login Success [user: cisco] [Source: 192.0.2.2] [localport: 22] at 18:06:57 UTC Sun Mar 26 2023
4. 라우터의 SCP 디버그는 어떤 정보도 표시하지 않습니다.
c8000v#debug ip scp
Incoming SCP debugging is on
5. SCP with -v 옵션은 SFTP 하위 시스템을 전송하는 디버그 로그를 표시합니다.
scp -v test.txt cisco@192.0.2.1:test.txt
Executing: program /usr/bin/ssh host 192.0.2.1, user cisco, command sftp
OpenSSH_9.0p1 Ubuntu-1ubuntu7, OpenSSL 3.0.5 5 Jul 2022
<snip>
debug1: Entering interactive session.
debug1: pledge: filesystem
debug1: Sending environment.
debug1: channel 0: setting env LANG = "en_US.UTF-8"
debug1: Sending subsystem: sftp
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
scp: Connection closed
6. 라우터에서 ssh 디버깅을 수행하면 SSH가 SFTP 하위 시스템을 검색한 다음 연결을 닫습니다.
c8000v#debug ip ssh detail
ssh detail messages debugging is on
*Mar 24 14:25:05.074: SSH: MD5 compliance exception Registered
*Mar 24 14:25:05.074: SSH1: starting SSH control process
*Mar 24 14:25:05.074: SSH1: sent protocol version id SSH-2.0-Cisco-1.25
*Mar 24 14:25:05.075: SSH1: protocol version id is - SSH-2.0-OpenSSH_9.0p1 Ubuntu-1ubuntu7 <snip>
*Mar 24 14:25:07.370: %SEC_LOGIN-5-LOGIN_SUCCESS: Login Success [user: cisco] [Source: 10.10.10.10] [localport: 22] at 14:25:07 UTC Fri Mar 24 2023
*Mar 24 14:25:07.379: SSH2 1: channel open request *Mar 24 14:25:07.389: SSH2 1: env request
*Mar 24 14:25:07.389: SSH2 1: subsystem request *Mar 24 14:25:07.389: SSH2 1: subsystem message received
*Mar 24 14:25:07.389: SSH2 1: searching for subsystem sftp for vty
*Mar 24 14:25:07.490: SSH1: Session terminated normally
7. 마지막으로 -O 옵션을 사용하는 SCP가 성공합니다.
jeff@jeff-virtual-machine:~$ scp -O test.txt cisco@192.0.2.1:test.txt
(cisco@192.0.2.1) Password:
test.txt 100% 28 2.7KB/s 00:00