前回、Go言語でSSHでリモートアクセスするコードを書いた。
とは言っても、
パスワード形式だけだと使えないサーバが多いだろうから
認証鍵によるアクセスのコードも調べてみる。
package main
import (
"log"
"golang.org/x/crypto/ssh"
)
func main() {
ip := "***.***.***.***" //サーバのアドレス
port := "22" //ポート番号は文字列で指定
user := "saito" //ユーザ名
//パスワードは削除
buf, err := ioutil.ReadFile("/認証鍵を格納しているディレクトリのパス/id_rsa.pem")
if err != nil {
panic(err)
}
key, err := ssh.ParsePrivateKey(buf)
if err != nil {
panic(err)
}
config := &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.PublicKeys(key),
},
}
conn, err := ssh.Dial("tcp", ip+":"+port, config)
if err != nil {
log.Println(err)
}
defer conn.Close()
session, err := conn.NewSession()
if err != nil {
log.Println(err)
}
defer session.Close()
//空のファイルを作成する
session.Run("echo -n > empty.txt")
}
認証鍵のパスを指定してReadFileで読み込む。
読み込んだバッファをパースして、公開鍵としてセットする。
ここで注意すべき点は、
自身のマシンに入っている秘密鍵はid_rsaからid_rsa.pemにしておく必要があるので、
端末で下記のコマンドを実行する。
id_rsaのディレクトリに移動して、
openssl rsa -in id_rsa -outform pem >id_rsa.pem
を実行。
ここまで出来たらパスワード認証と同じ要領で、TCPでDialして接続する。
このコードでとりあえず、
指定のサーバに空のファイルはできました。
さてさて、
この後、どうするかな…?




