2014-07-03 123 views
2

我試圖寫在條目的腳本來回路.ssh/authorized_keys,並與他們做的事情,即打印他們的指紋,並把它們添加到一個新的地方。這是我到目前爲止有:陳舊的文件描述符/標準輸入

echo "$SSH_KEYS" | while read key ; do 
    ssh-keygen -lf /dev/stdin <<< "$key" 
    echo "$key" >> newplace 
done 

這不幸使我有以下錯誤:

/dev/stdin: Stale file handle 

我在Ubuntu 14.04內核3.13.0-24泛型運行bash 4.3.11。

在運行Bash 4.3.8的相同內核上,它工作正常。在這一點上,改變我的Bash版本並不是一種選擇,這是一個用於生產中的東西的自動化腳本。

我發現這個解決方案在another question here on StackOverflow但它似乎不是這個Bash更高版本的工作。

回答

1

我認爲你是在正確的軌道上,但你想要的東西,如:

while read key; do 
    ssh-keygen -lf /dev/stdin <<< "$key" 
    echo "$key" >> newplace 
done < .ssh/authorized_keys 

至於反對:

echo "$SSH_KEYS" | while read key ; do 
    ssh-keygen -lf /dev/stdin <<< "$key" 
    echo "$key" >> newplace 
done 

注意的而不是管道的echo輸出,只需養活該文件直接進入while循環的stdin

這爲我工作於:

$ bash --version 
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) 
Copyright (C) 2013 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 

我也是在Ubuntu 14.04,但似乎有人還可能看到這個問題:https://github.com/docker/docker/issues/2067

一個解決辦法是寫每鍵入臨時文件,處理它,然後刪除文件。