web-dev-qa-db-ja.com

bash_profileまたはbashrcを実行せずにログイン

だから、誰かが.bashrcに何かを打ち込んだとすると、彼(または彼女)はsshを介してログインできなくなります(つまり、ファイルのエラーが原因でsshログインが終了します) )。それを実行せずにログインする方法(または.bashrcが他を実行するため)、またはファイルを削除/名前変更/無効化する方法はありますか?

マシンに物理的にアクセスできないとします。これは、sshを実行できる唯一のユーザーアカウントです。

参照用:.bash_profileには.bashrcが含まれます:

[[ -f ~/.bashrc ]] && . ~/.bashrc

編集:私が試したもの:

ssh user@Host "rm ~/.bashrc"

scp nothing user@Host:/RAID/home/tom/.bashrc

ssh user@Host  "/bin/bash --norc"

すべてエラーを出します:

/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory
79
Tom Ritter

私はあなたの唯一の選択肢は次のとおりだと思います:

  • 別のユーザーとしてsshでログインし、アカウントにsuします。

  • ホストで関連サービスが有効になっている場合は、ftpやsmbclientなどを使用します。

  • オープンネットワークサービスにオープンな脆弱性を見つけ、それを悪用します:)。

  • 管理者に問題を修正してもらいます。

25
larsks

ssh -t username@hostname /bin/shは私のために働きます。

120
user60069

私も同じ問題を抱えていて、どういうわけかそれを解決することができました。私はsshを使用してシステムにアクセスし、システムにログインしたらすぐにCtrl + cを押し続けました。その後、〜/ .bashrcが読み込まれず、変更することができました。

37
miyashin

公開したCVEを使用して、インストールしたネットワーク監視ソフトウェアのWebインターフェイスからrootとしてコマンドを実行しました。 rm /RAID/home/tom/.bashrc

次に、ログインしてsvnで変更を元に戻します。

21
Tom Ritter

A)開始する必要がありますbashsourceを使用せずに~/.bashrcまたは~/.bash_profileおよびb)そのようなシェルは完全なログインシェルにはならないため、シェルには/ttyがアタッチされていないため、sshttyを強制的にアタッチします。 :

ssh -t user@Host bash --norc --noprofile
17

あなたは運が悪い。

すべてのsshコマンドは、ログインシェルを実行します。 ssh $COMMAND実行$Shell -c $COMMANDscp実行$Shell -c /path/to/sftp-server、プレーンsshはシェルを実行するだけです。

7
Tobu

上記の回答はいずれも、sshのログインシェルをバイパスできません。完全なコマンドラインを渡すと、リモートシェルが実行されてコマンドが処理され、コマンドの作業環境が設定されます。これがシェルの目的であり、Unixの方法です。シェルなしで何かを実行しようとすると、あらゆる種類の互換性の問題が発生します。同様に、control-Cを試す​​ことは、回避しようとしている動作であるexitを呼び出すことと同じです。 bashがバグを続ける場合。なぜ人々は、マンページには何も言っていないので、それを引用する必要がある別のことを言っていると人々が言い続けるのはなぜですか。

さらに、ほとんどのLinuxシステムでは、/ bin/shを指定しても何も起こりません。これはbashへのシンボリックリンクにすぎないためです。

テストしたいですか? 「echo」ステートメントを.bashrcと.profileに追加して、どちらが実行されるかを確認します。やった。結果は次のとおりです。

ssh user@Hostは.bash_profileを実行しますssh user@Host /bin/bashは.bashrcを実行しますが、非インタラクティブ(プロンプトなし)と見なします。 ssh -t user@Host /bin/bashは.bashrcを2回実行します...ログイン時に1回、渡されたコマンドに対して1回実行するため、ANY Shellを指定すると常に最初に実行されます。 ssh -T user@Hostは、-Tまたは-tをまったく指定しないのと同じです。

さて、気づいたら、MYシステムは両方のファイルを実行しておらず、どちらか一方のみを実行しています。ただし、元のポスターの.bashrcを実行している.bash_profileに行があるため、.bashrcは何があっても常に実行されます。そこにその行を置くべきではありませんでした!その行が存在しなければ、問題はなかったでしょう。

別の方法を見つけるか、管理者を見つける必要があります。これが管理者の目的です。

6
Evan Langlois

何かのようなもの:

ssh Host "/bin/bash --norc"

これは機能しているようですが、PS1が設定されていないため、プロンプトなしでコマンドを入力することに注意してください。

これには、非破壊的な利点があります。

ssh -t user@Host "bash --norc --noprofile -c '/bin/rm .bashrc'"
2
wytten

試す

echo ^C | ssh <hostname> ' rm .bashrc'

^ C control-vの次にc

2
user161180

.bashrcが終了する前にctrl-Cを取得できる限り、ctrl-Cのマッシングが機能します。残念ながら、exitが.bashrcの初期にある場合、これを行うのは難しい場合があります。

直接sshにパイプすることで、できるだけ早くctrl-Cを配置できます。

{ echo ^C; cat /dev/tty; } | ssh -tt user@Host

ご了承ください ^Cはctrl-Vの後にctrl-Cが続くように入力されます。

これは、単一のctrl-Cをパイプ処理し、その後に制御端末からの入力を続けますが、-ttは、疑似端末を強制的に割り当てます。これは、可能な限り多くの.bashrcをバイパスする一方で、リモートマシン上に(多少不正な形式の)シェルを提供することを伝えています。

1
Chris

UH = 'user @ Host'; ssh $ UH 'mv〜/ .bashrc〜/ letmein'; ssh $ UH

カットして実行せず、userHostを変更してから、letmeinを編集して.bashrcとして保存してください

0
SpiesInOrbit

scpコマンドを使用して、.bash_profileを空のファイルで上書きしようとすることができます。私がグーグルで調べたことから、scpは.bash_profileを読み取らない非インタラクティブログインを使用します。

0

Bashrcファイルを削除することもできます:

ssh <hostname> rm ~/.bashrc
0
sybreon

システムが正常にセットアップされている場合、非対話型シェル(コマンドの実行など)に対して.bash_profileは実行されません。

問題は.bash_profileファイルにあると述べているので、それを邪魔にならない場所に移動してみてください。

ssh user@Host "mv ~/.bash_profile ~/.bash_profile_broken"
0
Lockie

User60069への称賛、それは私にとってはうまくいきましたが、私はシェル固有の起動ファイル.bashrcを使用しているので、/ bin/shでのログインは私にとってうまくいきました。

ただし、「そのような運がない」状況にある場合は、user60069とDennis Wのソリューションに基づいて、このソリューションを提供します。

ssh -t you@Host  /bin/bash --noprofile  --norc

デニスWは--norcオプションを提供しましたが、これはうまくいかないと誰かが言っていました。

起動ファイルを無効にするオプションについては、「man bash」または「man(your Shell)」を実行してください。問題を修正するために必要な時間だけ、忌まわしいシェルを使用する必要があります。

0
Jim

サーバーにログインする他の方法はプロファイルなしです、以下のコマンドを見つけてください
ssh -t user@Host bash --noprofile

PEMファイルを使用し、他のユーザーを使用しないAWSの場合
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile

お役に立てれば!

0
Krutarth Shah