Mina SSH에는 몇 가지 구현이 PublickeyAuthenticator
입니다.
org.apache.sshd.server.config.keys.AuthorizedKeysAuthenticator
및 org.apache.sshd.server.auth.pubkey.KeySetPublickeyAuthenticator
에서 확인하십시오.
PublickeyAuthenticator
의 구현은 주어진 공개 키가 사용자와 연결되어 있는지 확인합니다.
서명의 실제 확인은 인증 후 MINA SSH에 내부적으로 처리됩니다.
AuthorizedKeysAuthenticator
은 한 명의 사용자 만 지원하지만 사용자의 id_rsa.pub
파일을 가리키면 작동합니다.
this.sshServer.setPublickeyAuthenticator(
new AuthorizedKeysAuthenticator(new File("id_rsa.pub"));
당신은 너무 같은 사용자의지도에 대한 키를 확인 자신의 PublicKeyAuthenticator
를 작성할 수
public class UserKeySetPublickeyAuthenticator implements PublickeyAuthenticator {
private final Map<String, Collection<? extends PublicKey>> userToKeySet;
public UserKeySetPublickeyAuthenticator(Map<String, Collection<? extends PublicKey>> userToKeySet) {
this.userToKeySet = userToKeySet;
}
@Override
public boolean authenticate(String username, PublicKey key, ServerSession session) {
return KeyUtils.findMatchingKey(key, userToKeySet.getOrDefault(username, Collections.emptyList())) != null;
}
}
당신은 당신의 키 데이터와지도를 채우는 코드를 작성해야합니다. AuthorizedKeyEntry
에는 파일, 입력 스트림 또는 문자열에서이를 수행하는 유틸리티 메소드가 있습니다.
는 사용자의 이름이 허가 된 키 파일 읽기의 예 :
Map<String, List<PublicKey>> userKeysMap = new HashMap<>();
List<String> users = Arrays.asList("Jim", "Sally", "Bob");
for(String user : users){
List<PublicKey> usersKeys = new ArrayList<>();
for(AuthorizedKeyEntry ake : AuthorizedKeyEntry.readAuthorizedKeys(new File(user + "_authorized_keys"))){
PublicKey publicKey = ake.resolvePublicKey(PublicKeyEntryResolver.IGNORING);
if(publicKey != null){
usersKeys.add(publicKey);
}
}
userKeysMap.put(user, usersKeys);
}
다수의 공개 키를 등록하고 사용자 당을 검증 할 수있는 방법이 있나요를? – Hooli
여러 사용자를 위해 구현할 수있는 방법의 예를 사용하여 답변을 업데이트했습니다. – Magnus