ファイルリダイレクトが機能しないSSHコマンド

ファイルリダイレクトが機能しないSSHコマンド

authorized_keysファイルの一意の行だけが必要なので、次のコマンドの結果をリモートサーバー上のファイルにリダイレクトしたいと思います。

ssh [email protected] awk '!seen[$0]++' /root/.ssh/authorized_keys

私は成功せずに次のことを試しました。

ssh [email protected] "awk '!seen[$0]++' /root/.ssh/authorized_keys > /root/.ssh/authorized_keystemp"

ssh [email protected] "awk \'!seen[$0]++\' /root/.ssh/authorized_keys > /root/.ssh/authorized_keystemp"

ssh [email protected] '(awk \'!seen[$0]++\' /root/.ssh/authorized_keys > /root/.ssh/authorized_keystemp)'

私のGoogleは失敗しています。何が間違っているのかわかりますか?

ベストアンサー1

これを試してみてください(私のコンピュータでテストしましたが、うまく動作しているようです。削除する重複項目はありませんが...)。

ssh [email protected] "awk '!seen[\$0]++' /root/.ssh/authorized_keys > /root/.ssh/authorized_keystemp"

"にバックスラッシュがないため、-quote試行が機能しないため、$拡張$0されますbash

一重引用符を使用した試みは、'foo\'some thing\'foo'あなたが思うことを意味しないので動作しません。\- エスケープ文字は、一重引用符で囲まれた文字列内では解釈されません。したがって、これは実際には不均衡引用符と2つの引数です。最初のものは、foo\some2番目のものですが、最後の引数は単一引用符で囲まれた新しい文字列を開始するthing'fooので不完全です。'

シェル脱出は痛みを伴う可能性があり、特に二重脱出はさらにそうです。シェルスクリプトを最初に送信してから(などを使用して)実行する方がsftp簡単scpです。

おすすめ記事