web-dev-qa-db-ja.com

SSH:authorized_keysのno-ptyログインオプションの影響

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オプションで機能しますが、元の問題は残ります。

2
Tad Lispy

いくつかの調査と実験の後、このオプションの組み合わせがうまくいくようです。

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が別の方法を提案したとしても、それがないと転送は禁止されます。

2
Tad Lispy