0

私が働いている場所では、認証に Centrify を使用しています。何らかの理由で、システムに SSH 接続すると、 .bashrc / .bash_profile が実行されません。これは、ノードを起動するためにローカルで SSH を実行するときに、JAVA_HOME と他の多くの変数が設定されないことを意味します。SA は理由を突き止めるのに役立たず、私の開発マシンから SA を削除することを拒否しました。現在、ネイティブ圧縮ライブラリを必要とする Hadoop インスタンスを実行しようとしています。そのため、SSH 接続時に JAVA_LIBRARY_PATH が設定されていません。また、何らかの理由で hadoop-env.sh での設定が機能していません。

SSHを使用せずにシングルノードモードでhadoopを実行する方法はありますか?

4

2 に答える 2

1

JAVA_HOMEスクリプトからSSHを削除することは、スクリプトに追加するよりも面倒bin/hadoopです。すべてのデーモンはこれを介して開始されるため、env が機能しない場合にこれを変更する主なポイントです。

于 2012-08-16T10:58:48.767 に答える
1

.bash_profile と .bashrc が呼び出されていない場合は、Centrify とは関係のない ssh 呼び出しによってシェルが非対話的に呼び出されている可能性があります。

これについて詳しく説明している記事は次のとおりです。http://hacktux.com/bash/bashrc/bash_profile

.bash_profile と .bashrc を呼び出す場合は、以下で説明するように、対話型シェルを使用するように ssh 呼び出しを変更する必要があります。

SSH リモート コマンドを手動で実行した場合よりも少ない環境変数を取得するのはなぜですか?

例を見てみましょう。

これは、Centrify と OpenSSH を実行しているシステム上の私の .bashrc です。

$ id
uid=1296041358(simon_schuster) gid=1296041358(simon_schuster) groups=1296040449(domain_u),1296041358(simon_schuster)
[simon_schuster@engcen5 ~]$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

# User specific aliases and functions
JAVA_HOME=/usr/local/java/
export JAVA_HOME

リモート ssh 接続を使用してシステムに接続し、env コマンドを実行しようとすると、この ssh 接続は非対話型シェルを呼び出し、以下に示すように、JAVA_HOME 変数は表示されません。これは、シェルが非対話的に呼び出された場合、.bashrc が供給されないためです。

ssh simon_schuster@engcen5.ocean.net env
CentOS release 5.5 (Final)
Kernel 2.6.18-194.el5 on an x86_64

Password:
SHELL=/bin/bash
SSH_CLIENT=192.168.81.26 44524 22
CDC_PREW2KHOST=engcen5
USER=simon_schuster
MAIL=/var/mail/simon_schuster
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/share/centrifydc/bin
PWD=/home/simon_schuster
USER_PRINCIPAL_NAME=Simon.Schuster@OCEAN.NET
KRB5CCNAME=FILE:/tmp/krb5cc_cdc1296041358_TEcxjC
CDC_JOINED_DC=dc.ocean.net
SHLVL=1
HOME=/home/simon_schuster
CDC_JOINED_SITE=Ocean-Demo
DA_DASH_DEPTH=1
LOGNAME=simon_schuster
SSH_CONNECTION=192.168.81.26 44524 192.168.81.25 22
CDC_JOINED_ZONE=CN=Global,CN=Zones,OU=Unix,DC=ocean,DC=net
CDC_LOCALHOST=engcen5.ocean.net
CDC_JOINED_DOMAIN=ocean.net
_=/usr/bin/env

これは同じユーザーとしての別のセッションですが、今回はユーザーが対話的にログインし、env コマンドを入力します。JAVA_HOME 変数が表示されていることに注意してください。これは、対話型 (ログイン) シェルが呼び出されたときに .bashrc が読み込まれるためです。

[simon_schuster@engcen5 ~]$ env
HOSTNAME=engcen5.ocean.net
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.81.11 49519 22
CDC_PREW2KHOST=engcen5
SSH_TTY=/dev/pts/1
USER=simon_schuster
LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:
MAIL=/var/spool/mail/simon_schuster
PATH=/usr/kerberos/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/share/centrifydc/bin:/home/simon_schuster/bin
INPUTRC=/etc/inputrc
PWD=/home/simon_schuster
JAVA_HOME=/usr/local/java/
LANG=en_US.UTF-8
USER_PRINCIPAL_NAME=Simon.Schuster@OCEAN.NET
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
KRB5CCNAME=FILE:/tmp/krb5cc_1296041358
CDC_JOINED_DC=dc.ocean.net
SHLVL=1
HOME=/home/simon_schuster
CDC_JOINED_SITE=Ocean-Demo
DA_DASH_DEPTH=1
LOGNAME=simon_schuster
SSH_CONNECTION=192.168.81.11 49519 192.168.81.25 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
CDC_JOINED_ZONE=CN=Global,CN=Zones,OU=Unix,DC=ocean,DC=net
CDC_LOCALHOST=engcen5.ocean.net
G_BROKEN_FILENAMES=1
CDC_JOINED_DOMAIN=ocean.net
_=/usr/bin/env

bash_profile と bashrc を ssh ソース化するには、以下に示すように --login オプションを指定して bash を呼び出す必要があります。ご覧のとおり、env コマンドを ssh 経由でリモートで実行すると、JAVA_HOME 変数が表示されるようになりました。

ssh simon_schuster@engcen5.ocean.net "bash --login -c env"
CentOS release 5.5 (Final)
Kernel 2.6.18-194.el5 on an x86_64

Password:
HOSTNAME=engcen5.ocean.net
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.81.26 58672 22
CDC_PREW2KHOST=engcen5
USER=simon_schuster
LS_COLORS=
PATH=/usr/kerberos/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/share/centrifydc/bin:/home/simon_schuster/bin
MAIL=/var/spool/mail/simon_schuster
INPUTRC=/etc/inputrc
PWD=/home/simon_schuster
JAVA_HOME=/usr/local/java/
LANG=en_US.UTF-8
USER_PRINCIPAL_NAME=Simon.Schuster@OCEAN.NET
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
KRB5CCNAME=FILE:/tmp/krb5cc_cdc1296041358_qRHqro
CDC_JOINED_DC=dc.ocean.net
HOME=/home/simon_schuster
SHLVL=2
CDC_JOINED_SITE=Ocean-Demo
DA_DASH_DEPTH=2
LOGNAME=simon_schuster
SSH_CONNECTION=192.168.81.26 58672 192.168.81.25 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
CDC_JOINED_ZONE=CN=Global,CN=Zones,OU=Unix,DC=ocean,DC=net
CDC_LOCALHOST=engcen5.ocean.net
G_BROKEN_FILENAMES=1
CDC_JOINED_DOMAIN=ocean.net
_=/usr/bin/env

要約すると、環境変数を取得していないという事実は、Centrify とは何の関係もなく、シェルが非対話的に呼び出されているという事実と関係があります。

Centrify は、認証、アクセス制御、およびポリシーの実施のみを担当し、OpenSSH またはシェルのデフォルトの動作には影響しません。

お役に立てれば。

于 2012-08-17T15:13:25.027 に答える