PROBLEM DESCRIPTION or QUESTION
...
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에서 직접 접속할 때
Bastion 서버에서 스크립트 파일 생성
Code Block 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
Xftp 세션 생성
SFTP 설정
호스트 정보는 Bastion 서버여야 합니다. 그리고 ‘설정’을 누릅니다.'사용자 정의 SFTP 서버 사용 기능' 적용
빨강 박스 안은 sftp subsystem 경로입니다. 이는 서버 OS마다 다르므로 /etc/ssh/sshd_config 파일을 참고하여 지정합니다.
Ubuntu 계열: /usr/lib/openssh/sftp-server
Redhat, CentOS, Rocky 계열: /usr/libexec/openssh/sftp-server
Xshell에서 Xftp를 호출할 때
Bastion 서버에서 스크립트 파일 생성. 위 'Xftp에서 접속할 때'와 같은 스크립트입니다.
Code Block 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
Xshell 세션 파일 생성
빨강 박스 안 sftp subsystem 경로입니다. 자세한 내용은 위 'Xftp에서 접속할 때' 참조합니다.
세션 실행 후 툴바에서 Xftp를 실행합니다.
Xshell에서 바로 Target 서버로 접속
Bastion 서버에서 스크립트 파일 생성. 위 'Xftp에서 접속할 때'와 같은 스크립트입니다.
Code Block 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
Xshell 세션의 로그인 스크립트 기능 이용