前回、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して接続する。
このコードでとりあえず、
指定のサーバに空のファイルはできました。
さてさて、
この後、どうするかな…?