web-dev-qa-db-ja.com

sshではなくscpを安全に許可する方法

私は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機能しますが、仕方。できればユーザーを追加したくない。

7
spuder

わかりました、あなたは物事を台無しにした。

私が理解したことから、ファイルをbarからfooにコピーしたいだけです:

[file]  *bar* ------copy------> *foo*

それを行うには、最初にsshbarに、次にscpファイルをfooに:

        *bar* -------ssh------> *foo* [file]

次に:

        *foo* ----scp[file]---> *bar*

あなたがこのようにやっているなら、あなたはそれをやっている安全でなく間違っている。あなたがしなければならないすべてはあなたに直接scpファイルをscpすることです:

bob@foo$ scp bob@bar:/guest/buzz ~

言い換えると:

        *foo* <---scp[file]---- *bar*

解決すべき問題がいくつかあります…

ファイルの場所を知る方法は?

a)別の端末でSSHを使用する

2つ目のターミナルを開いて、SSHでbarにアクセスし、ファイルを見つけて、パスをコピーして最初のターミナルに貼り付けます。

b)SFTPを使用する

SFTP(FTPやFTPSとは一切関係ありません!)はOpenSSHに実装されており、デフォルトで使用できます。サーバーにSFTPで接続し、FTPのようなコマンドを使用してファイルを検索し、getします。

c)GUIを使用する

たとえばFilezillaまたはNautilusは、リモートSFTP/SSH共有を参照できます。

d)証明書を設定する

証明書接続を設定すると、リモート側だけでなくローカル側でもタブ補完を実行できます。たとえば、buzzの例では、次のことができます。

bob@foo$ scp bob@bar:/guest/[tab][tab]

そして、リモートの/ guest /フォルダーに含まれるファイルのリストを少し待ちます。

証明書を使用してSSHをセットアップする方法

a)まだ行っていない場合は、個人のRSA鍵ペアを生成します

OpenSSHクライアントをインストールしている場合は、次のように入力して実行できます。

bob@foo$ ssh-keygen -t rsa

(利用可能なすべてのオプションについては、マニュアルまたはオンラインを参照してください)。パスワードを要求される場合があります。これはローカルアカウントのパスワードではなく、生成しようとしている秘密キーの暗号化に使用できるオプションのパスワードです。

実際には、2つのファイルを生成します。

  • /Users/[yourusername]/.ssh/id_rsa
  • /Users/[yourusername]/.ssh/id_rsa.pub

最初の* id_rsa *はprivateである必要があります。デフォルトでは、ssh-keygenは(ファイルシステムのアクセス許可を使用して)公開することを回避するためにできる限りのことを行います。そのため、(オプションの)パスワードも要求されます。これに偏執しすぎないでください。* id_rsa * ==個人キー==privateを覚えておいてください。このキーは決してコンピューターから離れないでください

2つ目は公開されています。この公開証明書から秘密鍵を取り戻すには、膨大な量のコンピューター能力が必要です(私は平均HUUUUUUGE)。これは全世界と共有するのに完全に安全です。 NSAなどが本当にあなたの公開鍵を解読するために数百万ドルを費やすことを望んでいる非常にまれなイベントでさえ、あなたのMacbookはまだ安全です……(またはそうではありません。それだけ使いたい、あなたは困っています:)

この公開証明書は、実際にはリモートサーバーに置くものですbar

b)公開証明書をサーバーに配置するにはどうすればよいですか?

2つのオプション。

  1. 可能な場合はssh-copy-idを使用してください:bob@foo$ ssh-copy-id bob@bar。できました。
  2. でない場合~/.ssh/id_rsa.pubbarにコピーします。

    bob @ foo $ sftp〜/ .ssh/id_rsa.pub bob @ bar:pub_cert

(ここでは、公開証明書id_rsa.pub.ssh/から個人の~フォルダにリモートコンピュータにコピーしましたbarユーザーのホームフォルダに- bob。これがデフォルトです。また、id_rsa.pubpub_certに名前が変更されたことにも注意してください。使用できることを示すためだけにsftpを使用しましたscpとまったく同じです)。

次に、この証明書を正しい場所にコピーします。

bob@foo$ ssh bob@bar

これで、barのbobの個人用フォルダに移動しました。

bob@bar$ cat pub_cert >> .ssh/known_hosts

(ここでは、pub_certの内容をcatで表示しました。ただし、画面に出力する代わりに、この出力をファイル.ssh/known_hostsにリダイレクトします。>によるリダイレクトに注意してください。は、「ファイルのコンテンツをこのストリームで置き換える」を意味しますが、>>は「既存のファイルの最後にストリームを追加する」を意味します)。

c)結果?

これで、パスワードを入力しなくても、scp/sftp/sshからbarまでを好きなだけ使用できます。 [tab]キーを使用して、ローカルパスとリモートパスをオートコンプリートすることもできます。

d)Macのセキュリティはどうですか?

これを行うこの方法では、コンピューターで実行中のSSHサーバーも必要ありません。 SSHクライアントのみ(scp/sftp/sshプログラム)。 barが危険にさらされている場合でも、これは安全です。

e)これらのキー/証明書を使用して正確に何をしましたか?

まず、秘密鍵と公開証明書の2つのファイルを生成しました。セキュリティと認証に関連する多くのことができます。しかし、私たちのケースでは、かなり単純化して、これらは次のように使用されます。

barに接続しようとすると、接続に使用できる証明書を持っていることが通知されます。 barは、~/.ssh/known_hostsを含む、システムのさまざまな場所を検査します。アドバタイズした証明書を見つけ、それを使用して暗号化されたデータを送信します。

実際、公開証明書は暗号化できます!

これはすばらしいことですが、fooはそれをどのように理解できますか?秘密鍵を使用する。

秘密鍵は、対応する公開証明書で暗号化されたものを復号化できます!

これは、いわゆる非対称暗号化です。

次に、基本的に、サーバーは複雑なパスワードを公開証明書で暗号化して送信します。あなたはそれを受け取り、あなたの秘密鍵でそれを解読し、それを使ってサーバーでデータを双方向に暗号化し始めます。


さて、あなたが本当にあなたのやり方でSCP -fooに戻ることを本当にしたい場合はどうなりますか?

あなたはただトラブルを求めているだけです。しかし、起こり得る妥協の影響を軽減するために、chrootされたSFTP- onlyサーバーをセットアップできます。 scpsshは機能しなくなりますが、sftp、Filezillaなどが機能します。

ref: https://www.allthingsdigital.nl/2013/05/12/setting-up-an-sftp-only-account-with-openssh/

6
user21228

authorized_keysファイルの形式を見ると、特定のキーで使用できるコマンドを制限できることがわかります。これは、特定のコマンド(この場合はscp)のみに特定のキーを使用してSSHアクションを許可するために以前使用した方法です。 man authorized_keysを使用してmanページをご覧ください。

5
mdpc

https://github.com/scponly/scponly/wiki/Download を確認するか、ユーザーをsftpに制限することもできます...

# usermod -s /usr/libexec/openssh/sftp-server whoever
2
Red Cricket

他のものとして、他のマシンから直接コピーすることをお勧めします:

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エージェントが不要になるため、安全な状態で、逆方向の接続に使用します。

1
johannes