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


75

だから、.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

4
scpは接続時に.bashrcも読み取るため、scpコマンドは機能しません。この問題を回避するには、将来、[ -z "$PS1" ] && return。/ bashrcの先頭に何かを追加する可能性があります 。この方法で、scpは最初の行の後に.bashrcの解析を停止し、緊急時にそれを上書きすることができます。
ダロリオグ

回答:


24

あなたの唯一のオプションは次のとおりだと思います:

  • 別のユーザーとしてsshし、アカウントにsu

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

  • オープンネットワークサービスのオープンな脆弱性を見つけて悪用する:)。

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


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

このルートを下っていきます。ソリューションを見つけたら投稿します。幸いなことに、私にはいくつかの攻撃手段があります。
トムリッター

1
Filezillaを使用してSFTPをサーバーに送信し、修正しました。本当にありがとう、あなたは私を救った。.bash_profileに偶然 "exit 1"状態があり、それが私を苦しめました。
-djangofan

117

ssh -t username@hostname /bin/sh 私のために働く。


これはうまく機能します-シンプルで、問題を修正するために使用できるシェルを提供します。
MT。

1
Google ChromeのSecure Shellアプリ(chrome.google.com/webstore/detail/secure-shell/…)でこれを行おうとしていますが、コマンドライン引数をどのように/どこに配置するかわかりません。任意のヒント?
ベンジ

2
これは私には機能しません(ただし、manページによるとそうです)。ローカルホストは、ubuntu 14.04.1を実行し、リモートホスト上のubuntu 12.04.5です。ログインシェルがtcshであり、リモートホスト上でガベージを出力するため、rsyncできません(tcsh:そのようなファイルまたはディレクトリはありませんディレクトリはNSFマウントされています)。私はログインシェルをバイパスする問題を解決すると思ったが、それは機能しません。
シルヴィオレヴィ

2
デフォルトのシェルがcsh / tcshの場合、非対話型シェルの場合でも常に.cshrc /をソースします.tcshrc
ブライアンヴァンデンバーグ

私はここに座って、自分の愚かさを笑いながら、ここまで来ました。ソリューションはうまくいきました。このいじくり回しの仕事を手伝ってくれてありがとう
-ijustlovemath

36

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


11
私は懐疑的でしたが、これは実際に機能します
...-rmobis

これは天才です!
user1747134

実際に動作します...ありがとう!他の方法は私にとってはうまくいかなかった。
Zzzach ...

.bash_profileのみのMacで、これは私のために働いた:)
AnneTheAgile

OMG、私はインターネット全体を検索したと思ったので、これを試してみることにしました。これが私のために働く唯一の方法です!ありがとう!
ジアハオカイ

21

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

その後、ログインして、svnで行った変更を元に戻すことができました。


11
それは同時に素晴らしいと失敗の両方です。
MikeyB

1
@TomRitter:その参照を提供してください。
user2284570

1
それはサボテンの古いバージョンでしたので、あなたが8歳のソフトウェアを実行していない限り、私はそれがあなたを助けるとは思わない。また、8年前のソフトウェアを実行している場合、私はあなたを助けることができません。;)
トムリッター

15

あなたは、a)に開始する必要がbashのをせずにsource「INGのいずれか~/.bashrc、または~/.bash_profile、そのようなシェルが完全なログインシェルではありませんので、/何もないと、b)ttyの強制、添付のSSHを接続する端末を

ssh -t user@host bash --norc --noprofile

3
これは機能しますが、通常のプロンプトは表示されず、空の画面だけが表示されることに注意してください。lsあなたがいることを確信させるためにを試してみてください:)。またdumb、これは用語を使用することに注意してください。したがって、私にとってはnanoは機能しません。
CiprianTomoiagă18年

7

あなたは運が悪い。

すべてのsshコマンドがログインシェルを実行します。ssh $COMMANDrun $SHELL -c $COMMANDscprun $SHELL -c /path/to/sftp-server、plain sshはシェルを実行するだけです。


3
これはsftpにも当てはまります。SSHサブシステムもシェル内から実行されるようです。
lxgr 14年

私の経験では、sshのマニュアルページには「コマンドが指定されている場合、ログインシェルではなくリモートホストで実行されます」と書かれていますが、あなたは正しいです。それでも、ポスターは最高評価の回答(sshホスト名/ bin / sh)を使用して問題を解決することができました。何が得られますか?
シルヴィオレヴィ

@ Silvio、OPの答えは、SSHに関係のないエクスプロイトを使用したことです。
東武

右。誰かが最高評価の答えで成功を報告し、私は急いでそれがOPだと思いました。私はそれがうまくいったことを望んでいます-私は同様の状況を持っていますが、それは単に不自由ではなく迷惑です。(上記の最高評価の回答の下に私のコメントを参照してください。)
シルヴィオレヴィ

6

上記の回答のいずれも、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回、渡されたコマンドに対して1回実行するため、ANYシェルを指定すると常に最初のコマンドが実行されます。 ssh -T user@host-Tまたは-tをまったく指定しないのと同じです。

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

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


いくつかの良い点; 実行可能なコマンドは助けることができるよう、あなたが説明として、渡されませんが、多少議論の余地がポイントで、次の場合/bin/sh でした最初に実行してもらう、それが助け、バッシュがあるためしないロード~/.bashrcとして呼び出されたときsh。この回答は他の回答の上位集合であるため、他の回答を削除してください。
mklement

3

何かのようなもの:

ssh host "/bin/bash --norc"

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

これには、非破壊的であるという利点があります。


1
これは機能せず、最初にログインに成功しようとしましたが、ログインできず、bashを実行できません--norc
Tom Ritter

2

試してみる

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

^ C control-vがあり、c


1
私のシステムではctrl-vとctrl-cです。とにかくありがとう!:)
mzuther

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

これは非常に制限された環境で私にとってはうまくいきませんでした。.bashrcへのフルパスを指定する必要がありました。
-zbeekman

1

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

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

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

^Cがctrl-Vのように入力され、その後にctrl-Cが続くことに注意してください。

これは、単一のctrl-Cにパイプし、その後に制御端末からの入力が続きますが、-tt疑似端末を強制的に割り当てます。これにより、可能な限り多くの.bashrcをバイパスしながら、リモートマシン上に(多少不正な)シェルが作成されます。


0

コマンド.bash_profileを使用して、空のファイルで上書きを試みることができますscp。私がグーグルで調べたものから、scpはを読み込まない非対話型ログインを使用します.bash_profile


(仮に)ディレクトリ構造が間違っていることを覚えていて、エラーが出ない限り、これは機能しません-scpはファイルも実行します。
トムリッター

1
人々が気付いていないことは、scpは特別なものではないということです。これは、sshで実行される別のコマンドです。つまり、scpで対話型sshセッションで発生するほぼすべてのことを意味します。
ラースク2009

sftpについてはどうですか、それはsshサブシステムです。
アロ


0

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

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

ssh user@host "mv ~/.bash_profile ~/.bash_profile_broken"

ファイルがどのようにリンクされているかは問題ではありませんでした-.bash_profileには.bashrc =(詳細を追加しました。
Tom Ritter

1
しかし、Lockieが示唆しているのは(bashのマニュアルページで確認されています)、非対話型シェルは.bashrcまたは.bash_profileを実行しないということです。ただし、(この例のように)sshコマンドラインでコマンドを渡す場合でも、bashは "インタラクティブ"シェルとして起動されます。つまり、.bashrcファイルを読み取ります。良いアイデアですが、残念ながらsshは協力しません。
ラースク2009

0

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

カットして実行したり、変更しuserたりhost、編集しletmeinたり、名前を付けて保存したりしないでください。.bashrc


0

user60069への称賛、それは私のために働いたが、私はシェル固有の起動ファイル.bashrcを使用するので、/ bin / shでログインすることは私のために働いた。

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

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

Dennis Wは、-norcオプションを提供しましたが、誰かが彼らのために機能しなかったと言いました。

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


0

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

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

お役に立てれば!


-1

上記の提案と応答から、それは.bashrcまたは.bash_profileファイルではないと言うでしょう。また、sshのマンページには、実行するコマンドを指定すると、プロファイルファイルが読み取られないことが記載されています。

絶対パスから別のログインシェル(ksh?csh?sh?)を実行してみることをお勧めします。また、それはまったく異なる問題(ホームディレクトリの実行許可と読み取り許可)である可能性があることに注意してください。他のユーザーにaを依頼しls -la $YOUR_HOME_DIRて結果を郵送できますか?

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