Powershell에서 OpenSSH로 리모트 리눅스 서버 접속하기

smpl published on
2 min, 364 words

동기

윈도우에서도 파일탐색기보다 커맨드라인을 주로 이용하다보니, 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

References