SSH出力をファイルチェンジラインの末尾にリダイレクトする

SSH出力をファイルチェンジラインの末尾にリダイレクトする

まず、簡単なことをすればそのようなことは起こりません!だから私が知らないもう一つはそれを変換することです。ssh [email protected] "cat backup.tar" > backup.tar

サーバーへのアクセスを許可せずに、システムの現在の状態のバックアップを提供する必要があります。私がしたことは次のとおりです。

  1. 新しいユーザーを作成します。彼をそう呼ぶusername
  2. SSHキーを介してのみアクセスを許可する
  3. 鍵を入れてauthorized-keys
  4. コマンド/シェルをカスタム/etc/passwdスクリプトに変更username
  5. カスタムスクリプトはデータベースダンプを実行し、いくつかのファイルをコピーしてデータを取得し、最後にtarアーカイブを生成します。stdout
  6. に追加の出力がないことを確認してくださいstdout

データを取得するには、次の手順を実行する必要があります。ssh [email protected] > backup.tar

これで、変更された行の終わりを除いて、ほとんどすべてがうまく機能します。ますますtar大きくなるにつれて、各行には記号で終わる線量線があることがわかります^M。バイナリtarファイルを強制的に生成すると、dos2unixファイルはサーバー上のファイルと一致します。

なぜこれが起こり、行末がどのように変わりますか?でも、次のように単純化しました。usernameリンクのサーバー上のスクリプトは/etc/passwdリンクを生成し、上記のコマンドでログインし、出力を自分のローカルコンピュータ上のファイルにリダイレクトすると、行末はcat .viminfoまだエラーを送信します。sshusername

ベストアンサー1

起こり得ること:sshコマンド引数なしで(および指定されたオプションなしで)呼び出されると、RemoteCommand擬似端末セッションはデフォルトでリモートシステムに割り当てられます。これは、リモートシステムを実行するように設定されたコマンドに関係なく発生します。擬似端末は通常、改行文字をキャリッジリターン+改行シーケンス(LFCRLF、参照)に変換するように構成されています。この回答詳細な説明のため)。したがって、スクリプトの出力は疑似端末装置に書き込まれ、疑似端末装置はそれを変更してクライアントに送信します。

疑似端末割り当ては、次のようなさまざまな方法で回避できます。

  • ssh-Tクライアントのオプションを使用して呼び出されます(またはの設定ファイル(おそらく)RequestTTY noで使用されます)。ssh~/.ssh/config

  • リモートシステムでユーザーが入力した内容の前に追加no-pty (スペースに注意)してください。authorized_keys

  • PermitTTY noリモートシステムのSSHサーバー構成に使用されます(特定のユーザーにのみ影響を与えるために条件付きブロックを/etc/ssh/sshd_config使用することもできます)。Match

    Match User="username"
      ForceCommand /path/to/your/script
      DisableForwarding yes
      PermitTTY no
    

    (ユーザーに対して機能するコマンドシェルが設定されているとします/etc/passwd。これにより、ユーザーのパスワードをロックして他の方法でログインできないようにすることができます。)

  • (あなたの場合は、sshコマンド引数を使用して呼び出すことも機能するはずです(例:)ssh user@host :

もちろん、最も適切なオプションは、ユースケース、特にユーザーの選択を許可するかどうかによって異なります。

また見なさい:

おすすめ記事