Powershell에서 OpenSSH로 리모트 리눅스 서버 접속하기
동기
윈도우에서도 파일탐색기보다 커맨드라인을 주로 이용하다보니, putty나 mremote 같은 툴보다는 커맨드라인에서 ssh로 편하게 접속할 수 있는 방법을 찾아보게 되었다.
Powershell Profile
powershell에도 bash의 bashrc나, zsh의 zshrc 같은 profile 설정이 있다.
profile의 위치는, $PROFILE 이라는 환경변수로 접근 가능한데, 다음과 같은 명령으로 Profile을 편집하여 원하는 alias나 함수 추가가 가능하다.
nvim $profile
Powershell Profile 작성
기본적인 파워쉘 사용 방법이나, ssh 관련 설명은 References 섹션을 참고한다.
아래는 connect-ssh 라는 함수로 원하는 서버에 접속하는 profile 내용 예시이다. cp-ssh라는 함수는, 특정 파일을 서버의 홈 폴더에 전송해주는 기능을 한다.
$serverip = @{
testserver1 = '127.0.0.1'
testserver2 = '127.0.0.2'
}
function connect-ssh($servername) {
if ($serverip.ContainsKey($servername)) {
$ip = $serverip[$servername]
echo "Connecting $servername = $ip ..."
ssh -i ~/.ssh/the-keypair.pem smpl@$ip
}
else {
echo "No such server name. Please check below full server list."
echo $serverip
}
}
function cp-to-ssh($filename, $servername) {
if ($serverip.ContainsKey($servername)) {
$ip = $serverip[$servername]
echo "Trying to copy $filename to ~/ in $servername = $ip ..."
scp $filename smpl@${ip}:~/
}
else {
echo "No such server name. Please check below full server list."
echo $serverip
}
}
function cp-from-ssh($filename, $servername) {
if ($serverip.ContainsKey($servername)) {
$ip = $serverip[$servername]
echo "Trying to copy $filename from $servername = $ip ..."
scp smpl@${ip}:${filename} ./
}
else {
echo "No such server name. Please check below full server list."
echo $serverip
}
}
connect-ssh의 사용 방법은, 다음과 같이 쓰면 된다.
connect-ssh testserver1
cp-to-ssh의 사용 방법은, 다음과 같이 쓰면 된다. 각각 파일 하나와 여러개를 복사하는 예시이다.
cp-to-ssh .\file1.txt testserver1
cp-to-ssh @('.\file1.txt', '.\file2.txt', '.\sub\subfile.txt') testserver1
cp-from-ssh도 거의 동일하다. 단, cp-from-ssh는 1개의 파일을 복사해오는 것만 지원한다. 그리고, 파일의 경로가 로컬이 아니므로, 따옴표로 잘 감싸주어야 한다.
cp-from-ssh '~/.config/nvim/init.nvim' testserver1