私はMacブックプロ(fooと呼ばれます)を使用しています。顧客が大きなファイルをscpするサーバーがあります。 (バーと呼ばれます)。私は頻繁にsshでバーにアクセスし、ファイル(buzzと呼ばれます)をMacにscpします。
bob@foo$ ssh bar
Last login: Fri Aug 23 14:49:32 2013 from foo
bob@bar$ scp /guest/buzz bob@foo:~
Password:
ファイルをMacに戻すたびにパスワードを入力したくありません。これは最終的に自動化するためです。
私はsshキーをセットアップしたことができたことを知っていますが、誰かがbar
をハッキングした場合、簡単にアクセスできるのではないかと心配していますfoo
。 (私が間違っていれば訂正してください)
サーバーが危険にさらされた場合、パスワードなしでファイルをbarからfooにコピーする方法はありますか?それは誰かに私のMacへの完全なシェルアクセスを与えないでしょうか?
注:Macで新しいユーザーを設定し、そのユーザーのシェルアクセスを無効にすることを考えていますmight機能しますが、仕方。できればユーザーを追加したくない。
わかりました、あなたは物事を台無しにした。
私が理解したことから、ファイルをbarからfooにコピーしたいだけです:
[file] *bar* ------copy------> *foo*
それを行うには、最初にssh
をbarに、次にscp
ファイルをfooに:
*bar* -------ssh------> *foo* [file]
次に:
*foo* ----scp[file]---> *bar*
あなたがこのようにやっているなら、あなたはそれをやっている安全でなく間違っている。あなたがしなければならないすべてはあなたに直接scpファイルをscpすることです:
bob@foo$ scp bob@bar:/guest/buzz ~
言い換えると:
*foo* <---scp[file]---- *bar*
解決すべき問題がいくつかあります…
2つ目のターミナルを開いて、SSHでbarにアクセスし、ファイルを見つけて、パスをコピーして最初のターミナルに貼り付けます。
SFTP(FTPやFTPSとは一切関係ありません!)はOpenSSHに実装されており、デフォルトで使用できます。サーバーにSFTPで接続し、FTPのようなコマンドを使用してファイルを検索し、get
します。
たとえばFilezillaまたはNautilusは、リモートSFTP/SSH共有を参照できます。
証明書接続を設定すると、リモート側だけでなくローカル側でもタブ補完を実行できます。たとえば、buzz
の例では、次のことができます。
bob@foo$ scp bob@bar:/guest/[tab][tab]
そして、リモートの/ guest /フォルダーに含まれるファイルのリストを少し待ちます。
OpenSSHクライアントをインストールしている場合は、次のように入力して実行できます。
bob@foo$ ssh-keygen -t rsa
(利用可能なすべてのオプションについては、マニュアルまたはオンラインを参照してください)。パスワードを要求される場合があります。これはローカルアカウントのパスワードではなく、生成しようとしている秘密キーの暗号化に使用できるオプションのパスワードです。
実際には、2つのファイルを生成します。
最初の* id_rsa *はprivateである必要があります。デフォルトでは、ssh-keygen
は(ファイルシステムのアクセス許可を使用して)公開することを回避するためにできる限りのことを行います。そのため、(オプションの)パスワードも要求されます。これに偏執しすぎないでください。* id_rsa * ==個人キー==privateを覚えておいてください。このキーは決してコンピューターから離れないでください。
2つ目は公開されています。この公開証明書から秘密鍵を取り戻すには、膨大な量のコンピューター能力が必要です(私は平均HUUUUUUGE)。これは全世界と共有するのに完全に安全です。 NSAなどが本当にあなたの公開鍵を解読するために数百万ドルを費やすことを望んでいる非常にまれなイベントでさえ、あなたのMacbookはまだ安全です……(またはそうではありません。それだけ使いたい、あなたは困っています:)
この公開証明書は、実際にはリモートサーバーに置くものですbar。
2つのオプション。
ssh-copy-id
を使用してください:bob@foo$ ssh-copy-id bob@bar
。できました。でない場合、~/.ssh/id_rsa.pub
をbarにコピーします。
bob @ foo $ sftp〜/ .ssh/id_rsa.pub bob @ bar:pub_cert
(ここでは、公開証明書id_rsa.pub
を.ssh/
から個人の~
フォルダにリモートコンピュータにコピーしましたbarユーザーのホームフォルダに- bob。これがデフォルトです。また、id_rsa.pub
がpub_cert
に名前が変更されたことにも注意してください。使用できることを示すためだけにsftp
を使用しましたscp
とまったく同じです)。
次に、この証明書を正しい場所にコピーします。
bob@foo$ ssh bob@bar
これで、barのbobの個人用フォルダに移動しました。
bob@bar$ cat pub_cert >> .ssh/known_hosts
(ここでは、pub_certの内容をcat
で表示しました。ただし、画面に出力する代わりに、この出力をファイル.ssh/known_hosts
にリダイレクトします。>
によるリダイレクトに注意してください。は、「ファイルのコンテンツをこのストリームで置き換える」を意味しますが、>>
は「既存のファイルの最後にストリームを追加する」を意味します)。
これで、パスワードを入力しなくても、scp
/sftp
/ssh
からbarまでを好きなだけ使用できます。 [tab]キーを使用して、ローカルパスとリモートパスをオートコンプリートすることもできます。
これを行うこの方法では、コンピューターで実行中のSSHサーバーも必要ありません。 SSHクライアントのみ(scp
/sftp
/ssh
プログラム)。 barが危険にさらされている場合でも、これは安全です。
まず、秘密鍵と公開証明書の2つのファイルを生成しました。セキュリティと認証に関連する多くのことができます。しかし、私たちのケースでは、かなり単純化して、これらは次のように使用されます。
barに接続しようとすると、接続に使用できる証明書を持っていることが通知されます。 barは、~/.ssh/known_hosts
を含む、システムのさまざまな場所を検査します。アドバタイズした証明書を見つけ、それを使用して暗号化されたデータを送信します。
実際、公開証明書は暗号化できます!
これはすばらしいことですが、fooはそれをどのように理解できますか?秘密鍵を使用する。
秘密鍵は、対応する公開証明書で暗号化されたものを復号化できます!
これは、いわゆる非対称暗号化です。
次に、基本的に、サーバーは複雑なパスワードを公開証明書で暗号化して送信します。あなたはそれを受け取り、あなたの秘密鍵でそれを解読し、それを使ってサーバーでデータを双方向に暗号化し始めます。
あなたはただトラブルを求めているだけです。しかし、起こり得る妥協の影響を軽減するために、chrootされたSFTP
- onlyサーバーをセットアップできます。 scp
とssh
は機能しなくなりますが、sftp
、Filezillaなどが機能します。
ref: https://www.allthingsdigital.nl/2013/05/12/setting-up-an-sftp-only-account-with-openssh/
authorized_keys
ファイルの形式を見ると、特定のキーで使用できるコマンドを制限できることがわかります。これは、特定のコマンド(この場合はscp
)のみに特定のキーを使用してSSHアクションを許可するために以前使用した方法です。 man authorized_keys
を使用してmanページをご覧ください。
https://github.com/scponly/scponly/wiki/Download を確認するか、ユーザーをsftp
に制限することもできます...
# usermod -s /usr/libexec/openssh/sftp-server whoever
他のものとして、他のマシンから直接コピーすることをお勧めします:
bob@foo$ scp bar:/guest/buzz ~
何らかの理由でbarからコピーを開始したい場合は、fooにssh鍵ペアを作成して、fooがfooにログインできるようにします。次に、sshエージェントを使用して、同じ接続を介してキーを渡します。
bob@foo$ ssh -A bar
password:
bob@bar$ scp /guest/buzz bar:
# no password Prompt
また、公開鍵をbarにコピーすると、パスワードプロンプトが表示されなくなります。または、パスフレーズを鍵に追加し、sshを実行するときにそれを入力すると、sshエージェントが不要になるため、安全な状態で、逆方向の接続に使用します。