no-pty
のキーの前に付けられたrestrict
または~/.ssh/authorized_keys
ログインオプションの動作に混乱しています。
特定のローカルポートへのSSHトンネルを開始するために、特定のキーについてany相互作用exceptを防止するつもりでした。
restrict,permitopen="localhost:80" ssh-rsa AAAAB3NzaC1yc2EAAA[...]3c7rmJT5/ [email protected]
実際の効果は、対応する秘密鍵で識別することでトンネルを作成できることですが、明らかに任意のコマンドも実行します:
tunnel@a $ ssh -i tunnel_rsa [email protected]
PTY allocation request failed on channel 0
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-64-generic x86_64)
[...]
You have new mail.
ls .ssh/
authorized_keys
id_rsa
id_rsa.pub
known_hosts
セッションの開始時のPTY allocation request failed on channel 0
メッセージ(ログインオプションが何らかの効果を発揮することを示唆している)とその出力を伴うls .ssh/
コマンドに注意してください。
プロンプトはありませんが、私が意図していたことではありません。誰かがこれに光を当ててくれませんか?また、特定のキーをトンネルの作成のみに制限するための推奨される方法は何ですか?
更新
restrict
を使用すると、トンネルは実際には機能しません。
$ curl localhost:8080
curl: (52) Empty reply from server
またはHTTPieを使用する:
$ http :8080
http: error: ConnectionError: ('Connection aborted.', BadStatusLine("''",))
ssh -L ...
コマンドからの次の出力:
channel 2: open failed: administratively prohibited: open failed
restricted
の代わりにno-pty
オプションで機能しますが、元の問題は残ります。
いくつかの調査と実験の後、このオプションの組み合わせがうまくいくようです。
command="",restrict,port-forwarding,permitopen="localhost:80"
それぞれを個別に見ていきましょう。
command=""
このキーを使用してコマンドを実行することを禁止します
restrict
TTY割り当て、ポート転送、エージェント転送、user-rc、X11転送などのすべてのオプションを一度に無効にします。
port-forwarding
TCPポート転送を有効にしますが、以下を参照してください。
permitopen="localhost:80"
制限TCPローカルポートへのポート転送80
。これは、このキーで許可する必要があるonlyです。
私は主に OpenSSH WikiBookのクライアント構成ファイルの章 を読むことでこれを理解することができたので、クレジットの大部分はその作者に与えられます(LarsNoodénetal。)。足りない部分はport-forwarding
-permitopen
が別の方法を提案したとしても、それがないと転送は禁止されます。