Linuxサーバーへのリモートログインで〜/ .profileをバイパスする


32

~/.profilesshまたはputtyを使用してリモートLinuxサーバーにログインする際の実行をバイパスまたは防止する方法はありますか?


なぜあなたはこれをしたいのですか?ファイルの値を編集するだけではどうですか?(結局のところ、あなたのプロフィールです。)
テレマコス

7
これは、たとえば誰かが.profileファイルを台無しにして、システムに直接アクセスできない場合に便利です:)
monkey_p

それはまさに私がmonkey_pで自分​​自身を見つけた状況です
アンドリューハンプトン

回答:


30

bashの場合:

$ ssh hostname "bash --noprofile"

6
-tオプションも必要だと思います。
grawity

2
ssh -t hostname "bash --noprofile" .-tがなかった場合、 "standard in must be must tty"というエラーが表示されていました。
nitins

14

あなたはすべてのログインスクリプトを無効にするために探している場合は、使用することができます--noprofile無効にするフラグを/etc/profile~/.profileなど、および--norc無効にする~/.bashrcので、のように:

$ ssh 127.0.0.1 "bash --noprofile --norc"

利用可能な場合は、代替シェルを起動することもできます。私はで台無しにした後、これを使用する必要がありましたchsh

$ ssh 127.0.0.1 sh

これにより、空のシェル(プロンプトなし)にドロップされる可能性が高いので、動作lsするように確認してください。


4

ターゲットマシンがbashシェルにある場合:

user@host:/$ ssh hostname "bash --noprofile"

または、使用したい別のプロファイルがある場合

user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"

1

また、誤ったログインファイルを削除するには、WinSCPなどのFTPプログラムを使用してみてください。これはそれを破棄しますが、少なくともデフォルトのシェルにログインできるはずです。


または、単に名前を変更します。
jezmck

1

他の人が述べたように、接続を開始するときにフラグを指定してを実行--noprofileすると動作しますが、別のシェルを使用している場合、これはオプションである場合とそうでない場合があります。

1つの代替方法は、プロファイルスクリプトにSSH接続自体を検出させ、それに応じて動作させることです。通常、SSH接続は多くの環境変数を設定するため、これは簡単に確認できます。プロファイルの先頭に次のような行を追加するだけで十分です。

if [ "$SSH_CONNECTION" != "" ]; then
  echo Logging in with ssh
  return
else
  echo Logging in with something that is not ssh
fi

# rest of your profile goes here

return場合は、スクリプトの残りの部分をスキップします$SSH_CONNECTIONSSH接続が開始されるたびに正常に作成される環境変数が設定されているが、。それ以外の場合、プロファイルは通常のように実行されます。

これは、影響を受けるプロファイルスクリプトのみをスキップすることに注意してください。/etc/profile同様に変更しない限り、他のすべてのプロファイルスクリプト(例:)は引き続き処理されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.