使用公共服务器时,通常无法取得更高权限。本文介绍适用于服务器集群等无 root 权限条件情况下的zsh与插件配置、conda / python 安装、以及服务器免密登陆配置。
zsh 安装与配置
基础:zsh 安装
首先,检查本机是否安装 zsh
:
which zsh
如果显示为一个路径,例如 /bin/zsh
说明本地安装有zsh,且路径如上。可以跳过本节与下一节,进行oh-my-zsh的安装。如果显示 zsh not found
则需要安装 zsh
,以下演示把 zsh 安装到用户目录的zsh
文件夹中:
wget -O zsh.tar.xz https://sourceforge.net/projects/zsh/files/latest/download --no-check-certificate
mkdir zsh && unxz zsh.tar.xz && tar -xvf zsh.tar -C zsh --strip-components 1
cd zsh
./configure --prefix=$HOME/zsh
make && make install
此处$HOME/zsh
可以换成其他位置,例如$HOME/Software/zsh
。
安装完成后,在当前shell的配置文件(对bash
是.bashrc
;sh
则是.profile
)中加入环境变量,注意环境变量中 zsh/bin
位置应该和安装位置匹配:
export PATH=$HOME/zsh/bin:$PATH
并且使当前环境变量生效(以.bashrc
为例):
source ~/.bashrc
此时可以通过 zsh
命令启动并切换到 zsh
,且 which zsh
也应该返回 zsh
的安装路径
异常处理
可能的错误信息
This is probably a library called 'curses' or 'ncurses'.
,此时安装curses
即可:
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz
mkdir ncurses
tar -xvf ncurses-6.0.tar.gz
cd ncurses-6.0
./configure --prefix=$HOME/ncurses --with-shared --without-debug --enable-widec
make && make install
这里 $HOME/ncurses
同样可以替换为其他目录,之后配置环境变量,如果安装在其他地方,应同样注意修改安装位置路径。之后配置环境变量:
export CXXFLAGS="-fPIC"
export CFLAGS="-fPIC"
export NCURSES_HOME=$HOME/ncurses # install path
export PATH=$NCURSES_HOME/bin:$PATH
export LD_LIBRARY_PATH=$NCURSES_HOME/lib:$LD_LIBRARY_PATH
export CPPFLAGS="-I$NCURSES_HOME/include" LDFLAGS="-L$NCURSES_HOME/lib"
在环境变量后使环境变量生效:
source ~/.bashrc
之后重新make && make install
安装 zsh
即可。
将 zsh 设定为默认 shell
通常,如果zsh为内置安装,可以通过 chsh -s zsh
在输入密码后修改登陆 shell。
但如果 zsh
是新安装的,或不受信任,chsh
无法执行,则可以通过添加以下语句到默认 shell 配置文件中(zsh环境变量设置后),从而实现登陆后自动启动切换:
if [[ ($- == *i*) && ($SSH_TTY) ]];
then
export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l
fi
以上语句只对 ssh 访问生效,因此不会影响 SFTP 和远程调试等功能。
oh-my-zsh 安装
切换到 zsh
后:
git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
source ~/.zshrc
即可安装并启动 oh-my-zsh
。
autojump 插件安装
同样,在切换到 zsh
后:
git clone https://github.com/wting/autojump.git
cd autojump
./install.py
其中最后一句./install.py
需要Python才能执行,如果系统中没有默认安装 Python,可以在下一章 conda 安装完成后再进行 autojump 插件安装。
安装完成后可以使用 j 关键字
进行文件夹目录的快速跳转与转换。
Conda / Python 安装
以下以 miniconda 安装为例,运行:
wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
sh Miniconda3-latest-Linux-x86_64.sh
在输入若干yes
,并选择安装路径后,一步步完成安装。安装完成后可以打开 ~/.zshrc
检查 conda 的环境变量是否加入:
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
# ....环境变量....
# <<< conda initialize <<<
如果没有,则需要前往~/.bashrc
复制相关环境变量到~/.zshrc
中。并使其生效:
source ~/.zshrc
此时应该能看到shell前方出现了当前 Python 环境的名字(base):
(base) ➜ ~
尝试新建一个环境:
conda create -n demo python=3.8
ssh 免密登陆
在本地 ssh-keygen
创建证书,连续回车使用默认配置即可,之后复制本地的公钥文件到服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub UserName@xxx.xxx.xxx.xxx
其中 UserName
和 xxx.xxx.xxx.xxx
分别需要替换为服务器的用户名和服务器地址。
如果非默认22端口,需要指定端口,可以使用:
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 495 UserName@xxx.xxx.xxx.xxx
另外,需要保证用户目录下 .ssh/authorized_keys
文件仅用户自己有写权限,否则校验无效:
(在服务器上登陆后)
chmod 600 $HOME/.ssh/authorized_keys
CUDA 环境变量设置
如果在 GPU 服务器上 which nvcc
显示未找到,需要对 cuda的环境变量进行配置,将以下环境变量加入 .zshrc
:
export PATH=$/usr/local/cuda/bin:$PATH”
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$/usr/local/cuda/lib64/
以上例子为使用默认cuda,如果有多个 cuda 版本,可以进行修改替换。 此外,无root环境下更新 CUDA 版本与安装 cudnn 可以参考本站文章↗
Reference
medium: Change your shell to zsh on a remote server — with or without root access