前言
在我们使用CLion时,如果本地装了Linux子系统(如Ubuntu),想用WSL工具链,但Credentials
一直报错,这时可以用下面的解决方案。
如果你还没有安装WSL,可以参考官方教程:使用 WSL 在 Windows 上安装 Linux
解决方案
在你的Ubuntu中任意目录下,将下面内容复制到一个脚本中(例如文件名叫ubuntu_setup_env.sh
),然后执行。
#!/bin/bash
set -e
SSHD_LISTEN_ADDRESS=127.0.0.1
if [ -e "/dev/vsock" ]; then # in case of WSL2
SSHD_LISTEN_ADDRESS=0.0.0.0
fi
SSHD_PORT=2222
SSHD_FILE=/etc/ssh/sshd_config
SUDOERS_FILE=/etc/sudoers
# 0. update package lists
sudo apt-get update
# 0.1. reinstall sshd (workaround for initial version of WSL)
sudo apt remove -y --purge openssh-server
sudo apt install -y openssh-server
# 0.2. install basic dependencies
# sudo apt install -y cmake gcc clang gdb valgrind build-essential
# 1.1. configure sshd
sudo cp $SSHD_FILE ${SSHD_FILE}.`date '+%Y-%m-%d_%H-%M-%S'`.back
sudo sed -i '/^Port/ d' $SSHD_FILE
sudo sed -i '/^ListenAddress/ d' $SSHD_FILE
sudo sed -i '/^UsePrivilegeSeparation/ d' $SSHD_FILE
sudo sed -i '/^PasswordAuthentication/ d' $SSHD_FILE
echo "# configured by CLion" | sudo tee -a $SSHD_FILE
echo "ListenAddress ${SSHD_LISTEN_ADDRESS}" | sudo tee -a $SSHD_FILE
echo "Port ${SSHD_PORT}" | sudo tee -a $SSHD_FILE
echo "UsePrivilegeSeparation no" | sudo tee -a $SSHD_FILE
echo "PasswordAuthentication yes" | sudo tee -a $SSHD_FILE
# 1.2. apply new settings
sudo service ssh --full-restart
# 2. autostart: run sshd
sed -i '/^sudo service ssh --full-restart/ d' ~/.bashrc
echo "%sudo ALL=(ALL) NOPASSWD: /usr/sbin/service ssh --full-restart" | sudo tee -a $SUDOERS_FILE
cat << 'EOF' >> ~/.bashrc
sshd_status=$(service ssh status)
if [[ $sshd_status = *"is not running"* ]]; then
sudo service ssh --full-restart
fi
EOF
# summary: SSHD config info
echo
echo "SSH server parameters ($SSHD_FILE):"
echo "ListenAddress ${SSHD_LISTEN_ADDRESS}"
echo "Port ${SSHD_PORT}"
echo "UsePrivilegeSeparation no"
echo "PasswordAuthentication yes"
注意:脚本中我多注释了一行命令,如下所示。这些C/C++的编译工具根据自己的需要进行安装,脚本里就不强制让大家安装了,根据自己的需要进行安装。
# 0.2. install basic dependencies
# sudo apt install -y cmake gcc clang gdb valgrind build-essential
执行脚本:
sh ubuntu_setup_env.sh
验证
执行下面ssh命令连接验证(注意上面脚本中配置的端口是2222,用户名是自己的用户名)
gjh@DELL-GJH:~$ ssh gjh@localhost -p2222
The authenticity of host '[localhost]:2222 ([127.0.0.1]:2222)' can't be established.
ECDSA key fingerprint is SHA256:hopeXXXXXXXXXXXXXXXXXXXT0CzpIhuPc8zXt1w.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:2222' (ECDSA) to the list of known hosts.
gjh@localhost's password:
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 4.4.0-22000-Microsoft x86_64)
这样再去连接就没有问题了。