如何在GCE VM实例中更改默认Shell?

时间:2018-10-11 20:34:22

标签: shell google-cloud-platform google-compute-engine zsh

我已经成功创建并使用ssh -i ~/.ssh/google_compute_engine <EXTERNAL IP>登录到GCE VM。

VM正在运行ubuntu 18.04 LTS。我已经安装了zsh。我已验证which zsh的输出出现在/etc/shells中。

当我尝试运行chsh -s $(which zsh)时,系统会提示我输入密码,也不知道输入什么。

当我创建~/.ssh/google_compute_engine(它是在先前发布的gcloud ssh命令期间创建的)时,我没有为ssh密钥输入密码。

如何更改外壳?

编辑:这是我登录后看到的内容:

paymahn@paymahn:~$ chsh -s $(which zsh)
Password:
chsh: PAM: Authentication failure

5 个答案:

答案 0 :(得分:2)

无需创建密码,只需使用sudo

# for current logged user
sudo chsh -s /bin/zsh "$USER"
# or
sudo chsh -s /bin/zsh paymahn

答案 1 :(得分:1)

在GCP VM的默认情况下,它们没有密码,因此您首先需要使用int[] retryCounter = { 0 }; // AtomicInteger retryCounter = new AtomicInteger(); for (int i = 0; i < noOfRetries; i++) { CompletableFuture<CompletableFuture<String>> handleAsync = cf.handleAsync((result, throwable) -> { if (throwable == null) return CompletableFuture.completedFuture(result); retryCounter[0]++; // retryCounter.incrementAndGet(); return CompletableFuture.supplyAsync(supplier); }); cf = handleAsync.thenCompose(Function.identity()); } cf = cf.whenCompleteAsync((result, throwable) -> { System.out.println("Clean up"); System.out.println("Retry count: " + retryCounter[0]); // System.out.println("Retry count: " + retryCounter.get()); }); System.out.println("Wating for result..."); System.out.println("Result: " + cf.get()); 更改密码,然后才能为sudo passwd shell使用根密码。

答案 2 :(得分:0)

好吧,弄清楚了,有点。我认为我根本没有设置密码。我运行sudo passwd paymahn创建密码,然后在提示chsh期间使用新创建的密码。

答案 3 :(得分:0)

澄清/组合现有答案(无论如何,这对我有用):

  1. sudo passwd $USER,给自己一个密码
  2. 然后执行 chsh -s /bin/zsh $USER没有 sudo 前缀)

答案 4 :(得分:0)

$(which zsh) 添加到您的 .profile