次のファイルの指定されたパスを使用してSSHキーの内容を読み取る必要があります。私のSSH秘密鍵は次のとおりです。~/.ssh/firstname.lastname
Ubuntuで端末を呼び出すと、cat ~/.ssh/firstname.lastname
期待される結果が得られます。ただし、テキストファイルからSSHキーへのパスを取得した場合cat: '~/.ssh/firstname.lastname': No such file or directory
。
path_to_key.txt
たとえば、1行のファイルがあります~/.ssh/firstname.lastname
。
したがって、端末でこれを呼び出すと、cat $(cat path_to_key.txt)
上記のエラーメッセージが返されます。
すべてのファイルは同じディレクトリにあり、そのディレクトリでも呼び出しが行われます。
私はなぜこんなに「猫」になれないのか?
ベストアンサー1
猫はすべて機能しましたが、チルダ(~
)はコマンドラインで通常処理されているように処理されませんでした。ファイルの内容は内部的に返されますcat
がcat
、チルダ拡張、ワイルドカード、変数拡張などは外部で処理されました。したがって、外側の猫は通過します。言葉~/.ssh/firstname.lastname
予想される代わりに名前/path/to/your/home/.ssh/firstname.lastname
。
2つの解決策:
- ファイルを含める絶対パス: 埋め込み path_to_key.txt の代わりに
~/.ssh/firstname.lastname
(たとえば)/home/you/.ssh/firstname.lastname
- 結果コマンド(コマンド置換が発生した後)が次のように
cat
外部をラップします。eval
再処理済み:eval cat $(cat path_to_key.txt)
。これは追加の評価階層を提供し、そのキーファイル内のすべてのリダイレクトまたは後続のコマンドだけでなく、目的のチルダ拡張とともに実行されます。