목적 서버에 JUMP해야 하지만 JUMPHOST를 사용할 수 없는 경우 파일 전송


Xftp(Xshell, Xftp: Private Key A) ---> Bastion Server(Public key of A, Private Key B ) --->Target(Public key of B )

 

개인 키 B를 Xshell(Xagent)에서 서비스할 수 있다면 Jumphost 기능을 통해서 Target 서버로 바로 접속이 가능해서 터미널 작업 및 파일 전송을 할 수 있지만, 정책적으로 혹은 다른 이유로 개인 키 B를 Xshell이 사용할 수 없는 경우입니다.

명령어를 입력할 수 있는 터미널이 제공되는 환경이라면 Bastion 서버에서 SSH 명령으로 Target에 접속할 수 있습니다. 터미널이 없는 파일 전송 프로그램이라면 다음과 같은 설정을 통해서 Target 서버에 접속할 수 있습니다.

Xftp에서 직접 접속할 때

  1. Bastion 서버에서 스크립트 파일 생성

    user@bastion: ~$ vi ssh2target.sh #!/bin/bash keyfile=~/.ssh/id_ecdsa keypass=***** command="$1" eval $(ssh-agent) >/dev/null &&(expect >/dev/null << EOF spawn ssh-add ${keyfile} expect "Enter passphrase" send "${keypass}\r" expect eof EOF )&& ssh -A test@ubuntu2204 ${command}; kill -9 $SSH_AGENT_PID

     

  2. Xftp 세션 생성

    1. SFTP 설정
      호스트 정보는 Bastion 서버여야 합니다. 그리고 ‘설정’을 누릅니다.

      image-20241107-013710.png

    2. '사용자 정의 SFTP 서버 사용 기능' 적용

      image-20241107-011711.png

      빨강 박스 안은 sftp subsystem 경로입니다. 이는 서버 OS마다 다르므로 /etc/ssh/sshd_config 파일을 참고하여 지정합니다.

      • Ubuntu 계열: /usr/lib/openssh/sftp-server

      • Redhat, CentOS, Rocky 계열: /usr/libexec/openssh/sftp-server

Xshell에서 Xftp를 호출할 때

  1. Bastion 서버에서 스크립트 파일 생성. 위 'Xftp에서 접속할 때'와 같은 스크립트입니다.

    user@bastion: ~$ vi ssh2target.sh #!/bin/bash keyfile=~/.ssh/id_ecdsa keypass=***** command="$1" eval $(ssh-agent) >/dev/null &&(expect >/dev/null << EOF spawn ssh-add ${keyfile} expect "Enter passphrase" send "${keypass}\r" expect eof EOF )&& ssh -A test@ubuntu2204 ${command}; kill -9 $SSH_AGENT_PID
  2. Xshell 세션 파일 생성

    빨강 박스 안 sftp subsystem 경로입니다. 자세한 내용은 위 'Xftp에서 접속할 때' 참조합니다.

  3. 세션 실행 후 툴바에서 Xftp를 실행합니다.

Xshell에서 바로 Target 서버로 접속

  1. Bastion 서버에서 스크립트 파일 생성. 위 'Xftp에서 접속할 때'와 같은 스크립트입니다.

    user@bastion: ~$ vi ssh2target.sh #!/bin/bash keyfile=~/.ssh/id_ecdsa keypass=***** command="$1" eval $(ssh-agent) >/dev/null &&(expect >/dev/null << EOF spawn ssh-add ${keyfile} expect "Enter passphrase" send "${keypass}\r" expect eof EOF )&& ssh -A test@ubuntu2204 ${command}; kill -9 $SSH_AGENT_PID
  2. Xshell 세션의 로그인 스크립트 기능 이용