web-dev-qa-db-ja.com

SSHログイン時に自動的に環境変数を設定(ルートアクセスなし)

状況:

仮想マシンでUbuntu 12.04 LTSを実行しています。

私は定期的に大学のサーバーで自分のアカウントに接続する必要があります。これには、ターミナルを開いてssh -Y [email protected]を使用します。

一度そこに来たら、常に以下を実行する必要があります

setenv PYTHONPATH "place/stuff/this_goes_on_forever"

また、他の数行のコード。

私が欲しいもの:

  1. 私の主な要求:スクリプトを準備し、ssh経由でサーバーにログインするたびに自動的に実行するようにしたいと思います。

  2. これはサイドクエリですが、alias p="pwd"を使用すると(たとえば)新しいエイリアスが「取得」せず、pと入力すると、「コマンドが見つかりません」という結果になります。これは、rootでないためか、ssh経由でログインしているためなのでしょうか、それとも修正されているのでしょうか?

解決策の試み:

ローカルexport PYTHONPATH="..."ファイルに~/.bashrcを追加しようとしました。つまり、ターミナルを開始するとPYTHONPATHが設定されますが、サーバーにsshを設定すると、設定されなくなります(さて、私はまったく新しい環境変数のホストを持っています)。 ~/.bash_profileを試しましたが、うまくいきませんでした。

サーバーのexport PYTHONPATH="..."ファイルと~/.bash_profileファイルに~/.bashrcを追加しようとしましたが、どちらも機能しませんでした。

サーバーへのrootアクセス権がないため、サーバーのsshd_configファイル内のAcceptEnvまたはPermitUserEnvironementを変更できません。これは読み取り専用です。

このコードを配置できる場所は確かにありますが、どこにあるかわかりません。

3
Marchy

ここで考慮すべき点が2つあります。

  1. リモートサーバーでbashを使用していないようです。そのため、.bashrcおよび.bash_profileは読み取られません。

  2. sshは、リモートサーバーでログインシェルを起動するため、たとえあったを実行している場合でも、bash.bashrcは読み取られません。そのファイルは、対話型の非ログインシェルによってのみ読み取られます。

ただし、多くのログインシェルは~/.profileを読み取ります。使用しているシェルについて言及していないため、確信が持てませんが、(リモートサーバー上の)~/.profileファイルにこの行を追加すると、変数セットが取得される可能性があります。

PYTHONPATH="place/stuff/this_goes_on_forever"

tcshを実行しているため、スタートアップファイルは異なります。 man tcshから:

   A login Shell begins  by  executing  commands  from  the  system  files
   /etc/csh.cshrc  and  /etc/csh.login.   It  then  executes commands from
   files in  the  user's  home  directory:  first  ~/.tcshrc  (+)  or,  if
   ~/.tcshrc  is not found, ~/.cshrc, then ~/.history (or the value of the
   histfile Shell variable), then ~/.login, and finally ~/.cshdirs (or the
   value  of  the  dirsfile  Shell  variable)  (+).   The  Shell  may read
   /etc/csh.login before instead of  after  /etc/csh.cshrc,  and  ~/.login
   before  instead  of  after  ~/.tcshrc or ~/.cshrc and ~/.history, if so
   compiled; see the version Shell variable. (+)

したがって、setenvコマンドをリモートサーバーの~/.tcshrcに追加する必要があります。

最後に、bashに慣れているように思えるので、リモートサーバーで使用するシェルを変更してみませんか?サーバーにログインして実行するだけです

chsh

デフォルトのシェルとして/bin/bashを指定すると、これらの問題はすべてなくなります。その後、リモートサーバーで~/.profileまたは~/.bash_profileを編集することで、期待どおりに変数とエイリアスを設定できます。

1
terdon

サーバーでcshを使用しているようです。コードをcsh起動に追加してください。 cshの構文はbashとは少し異なり、エイリアスを設定します。詳細については、サーバーでman cshを実行してください。

1
X Tian

次のコマンドを実行して、使用しているシェルをテストします。

echo $Shell

Bashであり、自動的に〜/ .bashrcを読み取っていない場合は、〜/ .bash_profileファイルを作成する必要があります。

$ cat .bash_profile 
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

これに関して:

後で〜./。bash_profileを試しましたが、うまくいきませんでした。

プロファイルファイルを入手しようとしていた場合、その構文は正しくありません。環境ファイルを入手するには、次のコマンドを実行します。

. ~/.bash_profile
0
carlwgeorge