
私はMacbook SSH端末を使用し、RSAキーペアを生成し、id_rsa.pub
承認された権限でリモートでアップロードしています。リモートApache Webサーバーに接続できます。問題なくWebサーバー上でファイルを作成、開く、移動、修正、および予備チェックを管理でき、エラーメッセージも生成されません。
scp
驚くべきことに、私のデスクトップのフォルダや文書をリモートサーバーに転送することはできません。また、scp
リモートサーバーのフォルダや文書をデスクトップに転送することはできません。エラーメッセージが表示されるたびに:
標準入力:ttyではありません
リモート Web サーバーとの間で送受信されるコマンドは、scp
絶対または相対ファイルの場所参照では機能しません。
私の標準構文は次のとおりです。
ローカルホストから:
scp -rp ~/Desktop/foldername [email protected]:~/public_html
リモートホストから:
scp -rp [email protected]:~/public_html/foldername ~/Desktop/
エラーメッセージに問題があるようですstdin: is not a tty
。
どうなりますか?
このエラーが原因でファイル転送がブロックされた場合、どうすれば解決できますかstdin: is not a tty
?
答え1
その理由は、ターゲットサーバーのログインスクリプトの1つがstty...
ターミナル属性を設定するために使用されるためです。 tty がない場合、コマンドは失敗します。つまり、を使用して接続するときですscp
。
解決策は、stty
対話型セッションがある場合にのみ実行されることを保護することです。これを行う方法はいくつかあります。以下はbash / sh型シェルのいくつかの例です。
醜い:
stty ... >/dev/null 2>&1
私のために働いた:
test -n "$PS1" && stty ...
尊敬されるSEの他の場所:
# Check for a bash login shell
case $- in
*i*) stty ... ;;
esac
答え2
これがOSX sshdの実装にとって重要であるかどうかはわかりませんが、一部のシステムではttyがないと、〜/ルールを含む暗黙のホームディレクトリが拡張されず、予期しない結果が発生する可能性があります。これがわからないことはわかっていますが、~/構文の代わりにフルパス名を試してみてください。
答え3
私は.bash_profileをロードしようとするとこれが起こります。追加しました
[ -z "${PS1}" ] && return;
一番上は解決しました。