ちょっと前に Golangでsshの多段プロキシ、 Socks5プロキシ経由での接続について調べたが、今回はhttpプロキシ経由の場合どうするのかについて調べてみた。
残念ながらhttpプロキシ経由の通信(CONNECTメソッドを利用したプロキシ)で*net.Connを取得できるライブラリは無いようで、そのあたりについては書かないとならないようだ。
幸いにも サンプルコード を書かれている人がいたので、それを使ってhttpプロキシを経由したssh接続のコードを記載する。
実行可能なコードはこちらにもおいてある。
ssh_term_http_proxy.go
...
GolangでSocks5 Proxy経由でのssh接続をする場合はどうするのか調べてたので、備忘で残しておく。
Socks5であれば golang.org/x/net/proxy
ライブラリを使うことで*net.Connを取得できるので、それを利用してssh接続してやればいい。
Golangでsshへの接続を行う際、ssh proxyはどうやってやるんだろうと思ったんで調べてみた。
実装は結構簡単で、以下のように一度Proxyにsshでログイン後、ログイン対象サーバへの接続をProxyで作成してやるという流れでいけるようだ。
抜粋。動作するコードはこちらに記載。
ssh_term_proxy.go
// proxy1の情報
proxy1Host := "proxy1.host.local"
proxy1Port := "22"
proxy1User := "user"
proxy1Pass := "pass...
前にGolangでsshクライアントを作る際、どうにも制御キーをうまく渡せずに致し方なくsshコマンドを実行させるような処理を書いてたのだけど、ちょっと前に見かけたsshwというツールのソースを見てたところ、sshコマンドを実行せずにそのあたりが正常に動いていた。
で、なんでだろうと調べて見たところ、どうやら ssh/terminal.MakeRaw()
等を使ってうまくそのあたりを実装していたようだ。
こちらにもソースを上げてるのだけど、以下サンプル。
term_ssh.go
package main
import (
"fmt"
"os"...
Golangでファイルやディレクトリのパーミッションを取得しようとした際、オブジェクトとして取得できてしまうのでどうやったら0644,0700といった形式で取得すればいいのかな?と少し手こずったので、備忘として残しておく。
以下のように、printfで"%04o"でパーミッションを数字として出力することができるようだ。
最近ちょこちょこGoを勉強するようにしてたのだが、せっかくなので何か作ってみようと考えた。
で、なんかないかなと考えたところ、結構前にPythonでsshのラッパー書いてたのを思い出したので、今回はそれをGolangで書き直してみた。
sshのラッパーなので、基本Linux/Mac OS Xでしか動かない(Windowsは対象外)になってる。
作り直しなので前作ったPythonのラッパーと基本は変更せず、「\~/.lssh.conf」というtomlファイルにログイン情報を記述してコマンドを実行するだけにした。
(オプ...